美文网首页
lambda表达式与list

lambda表达式与list

作者: 柒月姐姐a | 来源:发表于2019-08-16 17:11 被阅读0次

java 8新特性 lambda表达式
项目中尽量避免循环嵌套,可以采用lambda表达式对list进行处理
下面是我写的原代码,for循环中嵌套for循环,性能肯定低。最近公司在优化代码,也开始研究lambda表达式了,感觉还是很好用,对list的处理极为灵活。

//查询所有未完成的订单
        List<Transaction> transactionList = transactionRepository.findAllByPayStatus(0);
        log.info("未支付交易单数量为:[{}],单号为:[{}]"+transactionList.size());
        for (Transaction transaction:transactionList
        ) {
            //当前时间与下单时间+30分钟比较
            log.info("当前时间:"+new Date());    
            Date orderTime = DateUtils.addMinute(transaction.getCreateTime(),30);
            log.info("取消订单时间:"+orderTime);
            if(DateUtils.compareDate(DateUtils.dateToStrLong(new Date()),DateUtils.dateToStrLong(orderTime))>0 ){
                List<Order> orderList = orderRepository.findAllByTranId(transaction.getId());
                for (Order order:orderList
                     ) {
                    order.setOrderStatus(6);
                    orderRepository.save(order);
                    //调用库存方法  将占用的库存恢复
                    orderService.updateGoodsStock(order,1);
                }
                transaction.setTransactionStatus(6);
                transaction.setPayStatus(-1);
                transactionRepository.save(transaction);

            }
        }

修改后的代码:

//查询所有未完成的订单
        List<Transaction> transactionList = transactionRepository.findAllByPayStatus(0);
        log.info("未支付交易单数量为:[{}]",transactionList.size());
        List<Long> tranId = transactionList.stream().map(s -> {
            //当前时间与下单时间+30分钟比较
            log.info("当前时间:",DateUtil.date());
            Date orderTime = DateUtils.addMinute(s.getCreateTime(),30);
            log.info("取消订单时间:",DateUtil.date(orderTime));
            if (DateUtils.compareDate(DateUtils.dateToStrLong(new Date()), DateUtils.dateToStrLong(orderTime)) > 0) {
                s.setTransactionStatus(6);
                s.setPayStatus(-1);
                transactionRepository.saveAndFlush(s);
                return s.getId();
            } else {
                return null;
            }
        }).collect(Collectors.toList());
        tranId.remove(null);
        log.info("需要取消订单的单号为:[{}]",tranId);
       if(tranId.size()>0){
           List<Order> orderList = orderRepository.findByTranIdIn(tranId);
           orderList.forEach(s -> {
               s.setOrderStatus(6);
               orderRepository.save(s);
               //调用库存方法  将占用的库存恢复
               orderService.updateGoodsStock(s,1);
           });
       }

因为刚刚开始接触,比较生疏,目前只能这样优化了,将嵌套的循环改为单层,以后在逐渐琢磨。
特此记录。

相关文章

  • Java8-Lambda&Stream

    Lambda 案例1 lambda替换匿名类 案例2 lambda对list进行迭代 案例3 lambda表达式内...

  • C++11匿名函数

    [C++11] Lambda表达式 Lambda表达式是一个匿名函数。基本语法如下:[capture list] ...

  • lambda表达式与list

    java 8新特性 lambda表达式项目中尽量避免循环嵌套,可以采用lambda表达式对list进行处理下面是...

  • Lambda表达式

    Lambda是一个匿名函数。 表达式形式 lambda argument_list: expression 其中l...

  • Python中lambda表达式注意事项

    lambda表达式是匿名函数,把它当作函数定义。list = []for i in range(1,4):list...

  • Lambda表达式

    Lambda表达式与函数式接口紧密相关,函数式接口介绍 Lambda表达式的基本语法 Java Lambda表达式...

  • Java8

    List类型抽象化 关键字: 谓词 行为参数化 匿名类 Lambda 策略模式 Lambda表达式 函数式接口就是...

  • Lambda 表达式

    实例 使用 Lambda 表达式对列表进行迭代// Java 8之前:List features = Arrays...

  • Java中的Lambda函数

    lambda表达式的一些简单例子 Lambda在语法上通常包含了一个参数列表 (argument list), 一...

  • C++ lambda表达式与函数对象

    C++ lambda表达式与函数对象 lambda表达式是C++11中引入的一项新技术,利用lambda表达式可以...

网友评论

      本文标题:lambda表达式与list

      本文链接:https://www.haomeiwen.com/subject/sdrqsctx.html