考虑这个对象:
final List<ApplicationUser> output = Arrays.asList(
new ApplicationUser() {
@Override
public List<Role> getAssociationRoles() {
//return null;
return Arrays.listOf(...);
}
}
);
public interface Role {
String getId();
}
我想返回 Role::id 列表。
如果getAssociationRoles不为空,下面的代码片段将起作用
final List<String> rolesId = applicationUsers
.stream()
.map(ApplicationUser::getAssociationRoles)
.flatMap(List::stream)
.map(Role::getId)
.collect(Collectors.toList());
如果getAssociationRoles为空,则抛出NullPointerException。
如何防止这种情况发生?
最佳答案
只需添加一个过滤器
即可过滤掉空关联角色:
final List<String> rolesId = applicationUsers
.stream()
.map(ApplicationUser::getAssociationRoles)
.filter(Objects::nonNull) <------- here!
.flatMap(List::stream)
.map(Role::getId)
.collect(Collectors.toList());
关于java8 - 映射列表的列表 : check if nested list is null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57817502/