在Java 8中是否有更好的方法来做到这一点?
final List<InstitutionUserConnection> allInstitutionUserConnections = new ArrayList<>();
for (final Institution institution : institutionsOfUser) {
allInstitutionUserConnections
.addAll(institutionUserConnectionService.getActiveInstitutionUserConnectionsByInstitution(institution));
}
发布于 2016-03-31 11:41:45
您也可以将内部列表直接映射到列表,然后使用自定义收集器来追加元素,而不是将内部列表映射到流。使用上面的收集器使用流的优点是,使用收集器可以获得更高的性能,因为它使用的是一个大的addAll
调用,而不是像Collectors.toList()
那样单独的小add
调用。
基于此的解决方案如下所示:
List<InstitutionUserConnection> result = institutionsOfUser.stream().
.map(institutionUserConnectionService::getActiveInstitutionUserConnectionsByInstitution)
.collect(Collector.of(ArrayList::new, List::addAll,
(left, right) -> { left.addAll(right); return left; }));
发布于 2016-03-18 11:13:40
是的,这就是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());
https://stackoverflow.com/questions/36082906
复制相似问题