Stream 转map,键或值为空报空指针问题处理?
问题
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));