介绍
字段中有个 1,2,3,4
形式的varchar LocationTypeIds字段
前端携带相应的字段中的某个值typeId
进行接口请求
期望获得LocationTypeId
有typeId
值的记录
原始代码
locationInfoDTOList
是List<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())
讲解
- 使用
stream()
方法将列表转换为一个流对象 - 然后使用
filter()
方法过滤出包含指定typeId
的地点信息对象
就不需要再使用split(‘,’)按逗号分割返回一个数组了 - 这个过滤条件是一个 Lambda 表达式,使用箭头符号
->
将输入参数info
映射到一个布尔值结果 - 接下来,使用
map()
方法将符合条件的地点信息对象转换为新的LabelValue
对象 - 这个转换也是使用一个 Lambda 表达式,将输入参数
info
映射到一个LabelValue
对象 LabelValue
对象的构造函数接受四个参数,分别是id
、locationTypeIds
、locationName
和id
(id,key,label,value)- 最后,使用
collect()
方法将转换后的LabelValue
对象收集到一个新的列表中,并使用toList()
方法指定收集器类型为列表 - 整个代码的返回结果就是包含符合过滤条件的
LabelValue
对象的列表