根据cardId分组,取最大时间
Map<String, UserInfo> collect = list.parallelStream().collect(
Collectors.toMap(UserInfo::getCardId, Function.identity(), (c1, c2) -> c1.getCreateTime() > c2.getCreateTime() ? c1 : c2));
根据userid分组,values字段求和
list.stream().collect(Collectors.groupingBy(User::getUserId,
Collectors.reducing(BigDecimal.ZERO,
User::getValues, BigDecimal::add)));
根据age取最大值
Optional<Person> cacl2 = persons.stream()
.reduce((p1, p2) -> p1.getAge() > p2.getAge() ? p1 : p2);
cacl2.ifPresent(person -> {
System.out.println("reduce" + JSON.toJSONString(person));
// reduce{"age":56,"name":"老周"}
});
单子段分组
personList.stream().collect(Collectors.groupingBy(Person::getGender));
多字段分组
// 定义一个函数Function,该函数将元素对象映射到一个键的集合里
Function<Person, List<Object>> compositeKey = person ->
Arrays.asList(person.getGender(), person.getAge(), person.getType());
// 分组
Map<List<Object>, List<Person>> groupingMap =
personList.stream().collect(Collectors.groupingBy(compositeKey, Collectors.toList()));
list转为map
Map<String, UserBO> maps1 = userInfoList.stream().collect(
Collectors.toMap(UserBO::getUserId, id -> id));