本文主要解决以下几个常用操作(随时补充)
1.一个List中根据对象某个属性去重
2.去除一个List中对象某个属性为固定值的对象(eg.去除List中sex为空的对象)
3.根据对象某个属性获取两个List中共有/独有的对象集合
准备条件
1.一个List中根据对象某个属性去重
eg.根据People对象中姓名进行去重
List<People> peopleListQuChong=peopleList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(People::getName))), ArrayList::new));
Collectors.collectingAndThen() 收集并处理
Collectors.toCollection(T::new) 收集成T类型集合
Comparator.comparing() 比较排序
循环打印
得到结果
2.去除一个List中对象某个属性为固定值的对象
eg.去掉List中sex为空的对象
List<People> peopleListSexNotNull=peopleList.stream().filter((People c) -> !StringUtils.isEmpty(c.getSex().trim())).collect(Collectors.toList());
循环打印
得到结果
3.根据对象某个属性获取两个List中共有/独有的对象集合
//peopleList1&&peopleList2中ID都存在的对象
List<People> peopleList1And2AllHave=new ArrayList<>();
//peopleList1中ID独有的对象
List<People> peopleList1HaveButPeopleList2NotHave = peopleList1.stream().filter(new Predicate<People>() {
@Override
public boolean test(People p) {
//根据Id过滤
for (People people : peopleList2) {
if (p.getId().equals(people.getId())) {
peopleList1And2AllHave.add(p);
return false;
}
}
return true;
}
}).collect(Collectors.toList());
循环遍历两个集合,利用"函数式接口Predicate"只返回stream流中为"true"的数据
循环打印
得到结果