这是起源:

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());

10-06 09:21