我在工作中使用到的stream流【案例2 <List<List>>结构】

介绍

字段中有个 1,2,3,4 形式的varchar LocationTypeIds字段
前端携带相应的字段中的某个值typeId进行接口请求
期望获得LocationTypeIdtypeId值的记录

原始代码

locationInfoDTOListList<MdLocationInfoDTO> 类型

 LabelValue children = new LabelValue();
 for(int i =0;i<locationInfoDTOList.size();i++){//所有的子集
            LabelValue children = new LabelValue();
            for (String temp:
                    locationInfoDTOList.get(i).getLocationTypeIds().split(",")) {
                if(Objects.equals(typeId, temp)){//如果某个子集的ids包括的上传的,那就把子集放在父里
                        children.setLabel(locationInfoDTOList.get(i).getLocationName());
                        children.setValue(locationInfoDTOList.get(i).getId());
                        children.setKey(locationInfoDTOList.get(i).getLocationTypeIds());
                        parent.add(children);
                }
            }
        }

修改后代码

locationInfoDTOList.stream()
.filter(info -> info.getLocationTypeIds().contains(typeId))
.map(info -> new LabelValue(info.getId(),info.getLocationTypeIds(),info.getLocationName(),info.getId()))
.collect(Collectors.toList())

讲解

  1. 使用 stream() 方法将列表转换为一个流对象
  2. 然后使用 filter() 方法过滤出包含指定 typeId 的地点信息对象
    就不需要再使用split(‘,’)按逗号分割返回一个数组了
  3. 这个过滤条件是一个 Lambda 表达式,使用箭头符号 -> 将输入参数 info 映射到一个布尔值结果
  4. 接下来,使用 map() 方法将符合条件的地点信息对象转换为新的 LabelValue 对象
  5. 这个转换也是使用一个 Lambda 表达式,将输入参数 info 映射到一个 LabelValue 对象
  6. LabelValue 对象的构造函数接受四个参数,分别是 idlocationTypeIdslocationNameid (id,key,label,value)
  7. 最后,使用 collect() 方法将转换后的 LabelValue 对象收集到一个新的列表中,并使用 toList() 方法指定收集器类型为列表
  8. 整个代码的返回结果就是包含符合过滤条件的 LabelValue 对象的列表
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tree_Root.

大佬给点饭吃

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值