一、List<对象>-stream
List<User> list = new ArrayList<>();
基础的一些使用
//遍历
list.forEach(x-> System.out.println(x.getId()+"-"+x.getName()));
//删除符合条件的元素
list.removeIf(e -> Objects.isNull(e));
1、排序:
一个字段排:
//list自己本身的顺序发生了改变
//【升序】
list.sort(Comparator.comparing(User::getId));
//【降序】
list.sort(Comparator.comparing(User::getId).reversed());
//list自己本身的顺序不发生改变
list.stream().sorted(
Comparator.comparing(User::getId, Comparator.naturalOrder()).reversed())
.forEach(System.out::println);
两个字段排序:
//bya为第一个排序字段,升序 这个id相同时走第二个排序
Comparator<User> id= Comparator.comparing(User::getId);
//bya为第二个排序字段,降序.reversed()
Comparator<User> age= Comparator.comparing(User::getAge).reversed();
Collections.sort(list,id.thenComparing(age));
//自然比较器
//Comparator.naturalOrder()
//Comparator.nullsLast() null排在最后面
//Comparator.nullsFirst() null排在最前面
list.sort(
Comparator.comparing(User::getAge,
Comparator.nullsLast(Integer::compareTo))
.thenComparing(User::getUserName,
Comparator.nullsFirst(String::compareTo))
2、分组:
一个字段分组:
Map<String, List<User>> userGroupList=
list.stream().collect(Collectors.groupingBy(User::getUserName));
两个字段分组-一起:
Map<String, List<User>> voMap =
list.stream().collect(Collectors.groupingBy(
a -> com.pcitc.kpi.utilis.util.StringUtils.format("{0}{1}",
a.getOrgCode(), a.getUserName())));
Map<String, Integer> groupOrderNumMap =
list.stream().collect(HashMap::new,
(m, v) -> m.put(v.getOrgCode(), v.getUserName()),
HashMap::putAll);
两个字段分组-先后:
//先按年龄分组、再按性别分组
Map<Integer, Map<String, Map<Integer, List<User>>>> userMap =
list.collect(Collectors.groupingBy(
UserD::getAge, Collectors.groupingBy(
User::getSex, Collectors.groupingBy((userDTO) -> {
if (userDTO.getSex().equals("男")) {
return 1;
} else {
return 0;
}
}))));
3、计算
//求和
list.stream().map(User::getMoney).reduce(BigDecimal.ZERO,BigDecimal::add);
4、去重
一个字段去重:
// 根据name去重
list.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(User::getName))), ArrayList::new));
System.out.println("name去重后:"+collect.toString());
两个字段去重:
list.stream().collect(
collectingAndThen(toCollection(() -> ’
new TreeSet<>(Comparator.comparing(o -> o.getName() + ";"
+ o.getClassName() + ";"
+ o.getSex()))), ArrayList::new));
System.out.println("多条件去重后:"+collect1.toString());