这是起源:
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中制作呢?
答案 0 :(得分:5)
您需要使用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());
答案 1 :(得分:0)
managedRoles = roles.stream()
.filter(r -> r.getManagedRole() != null)
.flatMap(role -> role.getManagedRole())
.collect(Collectors.toList());
生成列表 或尝试此示例以将元素添加到现有列表
List<String> destList = Collections.synchronizedList(
new ArrayList<>(Arrays.asList("foo")));
List<String> newList = Arrays.asList("0", "1", "2", "3", "4", "5");
newList.stream()
.collect(Collectors.toCollection(() -> destList));
System.out.println(destList);