目录
目录
toMap
Duplicate key
Duplicate key toMap 需要考虑到 key 重复的情况 (t1, t2) -> t1
List<TProductionPlan> productionPlanList = tProductionPlanService.list(new LambdaQueryWrapper<TProductionPlan>()
.eq(TProductionPlan::getDelFlag, false)
.in(CollectionUtils.isNotEmpty(planCodeList), TProductionPlan::getCode, planCodeList)
);
if (CollectionUtils.isNotEmpty(productionPlanList)) {
// 非主键作为key,可能会出现的问题 java.lang.IllegalStateException: Duplicate key TProductionPlan
planCodeMap = productionPlanList.stream().collect(Collectors.toMap(TProductionPlan::getCode, t -> t, (t1, t2) -> t1));
}
value 为null
源码中Objects.requireNonNull(value); toMap 需要过滤 value 为null这种情况
List<Person> personList = Lists.newArrayList(
new Person(1, "张三", false),
new Person(1, "李四", true),
new Person(2, null, false) // 虽然 name 是 null,但是对象不为空
, null);// 对象为空 直接空指针
Map<Integer, String> nameMap2 = personList.stream()
.filter(Objects::nonNull) // 过滤了集合中的最后一个空元素
.filter(person -> !StringUtils.isEmpty(person.getName())) // 不写这句,下面空指针
.collect(Collectors.toMap(Person::getAge, Person::getName, (t1, t2) -> t1));
for (Map.Entry<Integer, String> entry : nameMap2.entrySet()) {
System.out.println(entry);
}
groupingBy
element cannot be mapped to a null key groupingBy 需要过滤 key 为null的这种情况
List<Person> personList = Lists.newArrayList(
new Person(1, "张三", false),
new Person(1, "李四", true),
new Person(null, null, false),
null);
Map<Integer, List<Person>> ageMap = personList.stream()
.filter(Objects::nonNull)
/*.filter(person -> person.getAge() != null)*/
.collect(Collectors.groupingBy(Person::getAge)); // 第三个元素虽然不为空,但是下面按照年龄分组,空指针异常
for (Map.Entry<Integer, List<Person>> entry : ageMap.entrySet()) {
System.out.println(entry);
}
sorted
有返回值
list.stream().sorted(Comparator.comparing(类名::get属性)).collect(Collectors.toList());
无返回值
list.sort(Comparator.comparing(类名::get属性));