Stream 转map,键或值为空报空指针问题处理?

发布时间 2023-05-09 17:45:53作者: r1-12king

问题

map的key和value通过对象::方法或对象.方法。

list.stream().collect(Collectors.toMap(UserCacheInfoBO::getEmployeeNumber, UserCacheInfoBO::getUsername, (value1, value2) -> value1));

list.stream().collect(Collectors.toMap(e->e.getEmployeeNumber(), e->e.getUsername(), (value1, value2) -> value1));

缺点:value值不能为空,否则会报空指针错误。

 

如何过滤value为空的情况?

方法一:使用Optional对空值进行处理

list.stream().collect(Collectors.toMap(
                    x -> Optional.ofNullable(x).map(Student::getName).orElse(""),
                    x -> Optional.ofNullable(x).map(Student::getPetName).orElse(""),
                    (a, b) -> StringUtils.isNotBlank(a) ? a : b));

  

方法二:

Map<String, String> collect1 = list.stream().collect(Collectors.toMap(x -> x.getName(),
                    x -> Objects.nonNull(x.getPetName()) ? x.getPetName() : "",
                    (a, b) -> StringUtils.isNotBlank(a) ? a : b));