这是起源:
List<Role> managedRoles = new ArrayList<>();
for (Role role : roles) {
if (role.getManagedRole() != null) { // a list of Role.
managedRoles.addAll(role.getManagedRole());
}
}
这就是我要的:
managedRoles = roles.stream().filter(r -> r.getManagedRole() != null).map(role -> role.getManagedRole()).collect(); // how to addAll ?
但是
role.getManagedRole() is a List<Role>
,我认为需要像addAll
这样的功能。那么如何在Lambda中制作呢? 最佳答案
您需要使用flatMap
而不是map
来将List<Role>
返回的所有role.getManagedRole()
展平为单个Stream<Role>
。
List<Role> managedRoles =
roles.stream()
.filter(r -> r.getManagedRole() != null)
.flatMap(role -> role.getManagedRole().stream())
.collect(Collectors.toList());