Java8(jdk1.8)Optional排序倒叙以及取最后一条数据的问题

本文介绍了如何在Java8中使用Optional、List和Comparator来解决一个问题:首先过滤并去重一个包含RechargePromotionSnapshot对象的list,然后根据amount字段进行降序排序,并获取amount最大的条目。主要步骤包括使用filter去重,sort进行升序排序,通过reversed实现降序,最后用findFirst获取最大值。在排序后再反转时,需要明确指定对象类型以避免类找不到的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取一个list数组查到比amount小的所有数据,然后进行过滤去重,根据金额进行排序,取到查出的list数据中amount最大的一条数据。

List<RechargePromotionSnapshot> rechargePromotionSnapshotList = rechargePromotionSnapshotDao.findByExample(example);
      //收款金额
      int amount = accountTransactionReqVo.getAmount().intValue();
      Optional<RechargePromotionSnapshot> rechargePromotionSnapshot = rechargePromotionSnapshotList.stream()
          .filter(m -> m.getRechargeAmount() < amount)
          .sorted(Comparator.comparingInt((RechargePromotionSnapshot m) -> m.getRechargeAmount()).reversed())
          .findFirst();

思路:
1.先用filter进行过滤(去重)
2.sort方法进行根据int类型进行排序(第一条的amount最小)
3.排序之后用reversed方法进行颠倒
4.再用findFirst即可取到最后一条

注意:
.sorted(Comparator.comparingInt((RechargePromotionSnapshot m) -> m.getRechargeAmount()).reversed())
使用sorted进行排序之后接着用reversed进行倒叙时,容易出现找不到类的错误,原因是排序之后再倒叙,倒叙后的list不知道自己是属于哪个类,所以要在排序的对象前加一个类名 (RechargePromotionSnapshot m) 这样

之后用isPresent判断是否存在值,进行接下来的业务逻辑操作。

//判断是否存在值
      if (rechargePromotionSnapshot.isPresent()) {
      //获取过滤出来的数据用.get()方法
      rechargePromotionSnapshot.get();
      	//业务逻辑操作
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值