java8常见的stream流常用方法

 1.List对象,根据对象中某个属性进行分组

核心代码: cartItemList根据 businessId 分组 , map格式 (businessId , 等于businessId 的集合)

Map<String, List<CartItem>> collect = cartItemList.stream()
                                           .collect(Collectors.groupingBy(CartItem::getBusinessId));

2.取出集合对象中的某个值转list对象

    例:从检测项集合中, 获取 检测id , 返回检测id集合

    detectInfoList -> 检测详集合       getId()  -> 获取检测id     detectIds  -> 检测id集合

List<Long> detectIds = detectInfoList.stream().map(x -> x.getId()).distinct().collect(Collectors.toList());

3.根据某个值进行过滤处理

     例:根据检测id  获取此检测id的检测详情集合

  chronicDetectDetailList  -> 所有的检测详情集合  
   x -> x.getDetectId().equals(chronicDetectInfo.getId() -> 
   遍历检测详情获取检测id =  传入的检测id(chronicDetectInfo.getId())
//根据检测项id过滤 , 对应id set对应的检测详情
List<ChronicDetectDetail> detectDetailList = 
chronicDetectDetailList.stream().filter(x -> x.getDetectId().equals(chronicDetectInfo.getId()))
.collect(Collectors.toList());

4.根据某个值过滤,然后取时间最大的一条数据

TmsBillContainer container = tmsBillContainerList.stream()
                .filter(tmsBillContainer -> !tmsBillContainer.getStatus().equals(TmsBillContainerStatusEnums.STATUS_40.getStatus()))
                .sorted(Comparator.comparing(TmsBillContainer::getCreateTime).reversed())
.findFirst().orElse(null);

5.计算某个属性的总数

//说明: billHandoverDtlList集合 的数量 qty 的总数
Integer scannedQty = billHandoverDtlList.stream().map(TmsBillHandoverDtl::getQty).reduce(0, Integer::sum);

6.单值按照时间倒序排序

list = list.stream().sorted(Comparator.comparing(实体::排序字段).reversed()).collect(Collectors.toList());

7.单值根据userId 进行排序——升序排序

list =  list.stream().sorted(Comparator.comparing(User::getUserId))
.collect(Collectors.toList());

8.多值排序,根据userId及userName进行联合升序排序

list =  list.stream().sorted(Comparator.comparing(User::getUserId)
.thenComparing(User::getUserName)).collect(Collectors.toList());

9.先以userId升序,升序结果进行userId降序,再进行userName升序

list =  list.stream().sorted(Comparator.comparing(User::getUserId).reversed()
.thenComparing(User::getUserName)).collect(Collectors.toList());

10.先以userId降序,再进行userName升序 **推荐使用该种方式

list =  list.stream().sorted(Comparator.comparing(User::getUserId,Comparator.reverseOrder())
.thenComparing(User::getUserName)).collect(Collectors.toList());

11.先以userId升序,再进行userName降序

list =  list.stream().sorted(Comparator.comparing(ser::getUserId)
.thenComparing(User::getUserName,Comparator.reverseOrder()))
.collect(Collectors.toList());

12.集合对象根据某两个字段组装map

Map<Long,String> map = tmsBillContainers.stream().collect
(Collectors.toMap(TmsBillContainer::getId, TmsBillContainer::getContainerNo));

13.集合对象根据某个唯一值,组装map , 值,对象

Map<Long, TmsBmShipper> shipperMap = tmsBmShippers.stream()
.collect(Collectors.toMap(TmsBmShipper::getShipperId, Function.identity()));

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值