在Java 8中有更好的方法吗?
final List<InstitutionUserConnection> allInstitutionUserConnections = new ArrayList<>();
for (final Institution institution : institutionsOfUser) {
allInstitutionUserConnections
.addAll(institutionUserConnectionService.getActiveInstitutionUserConnectionsByInstitution(institution));
}
答案 0 :(得分:9)
是的,这是flatMap
操作的用途:
List<InstitutionUserConnection> allInstitutionUserConnections =
institutionsOfUser.stream()
.flatMap(institution -> institutionUserConnectionService.getActiveInstitutionUserConnectionsByInstitution(institution).stream())
.collect(Collectors.toList());
如果方法抛出已检查的异常,则需要捕获它并通过记录,重新抛出未经检查的异常和/或返回默认值来处理它。
List<InstitutionUserConnection> allInstitutionUserConnections =
institutionsOfUser.stream()
.flatMap(institution -> {
try {
return institutionUserConnectionService.getActiveInstitutionUserConnectionsByInstitution(institution).stream();
} catch (TheCheckedThrownException e) {
// do something here, like throw an unchecked exception
}
})
.collect(Collectors.toList());
答案 1 :(得分:5)
您可以将内部列表平面映射到流,而不是将其直接映射到List,然后使用自定义收集器来附加元素。使用上面使用流的收集器的优点是,使用收集器,您可以获得更高的性能,因为它使用1个大型addAll
调用,而不是像{{{{{}}那样的单独的小add
调用1}}确实。
基于此的解决方案如下:
Collectors.toList()