在Java 8中是否有更好的方法可以做到这一点?

final List<InstitutionUserConnection> allInstitutionUserConnections = new ArrayList<>();
for (final Institution institution : institutionsOfUser) {
    allInstitutionUserConnections
        .addAll(institutionUserConnectionService.getActiveInstitutionUserConnectionsByInstitution(institution));
}

最佳答案

您也可以将内部列表直接映射到List,而不是将内部列表平面映射到流,然后使用自定义收集器来追加元素。在使用流之上使用收集器的优势在于,使用收集器可以获得更高的性能,因为它使用1个大addAll调用,而不是像add那样使用单独的小Collectors.toList()调用。

基于此的解决方案如下所示:

List<InstitutionUserConnection> result = institutionsOfUser.stream().
        .map(institutionUserConnectionService::getActiveInstitutionUserConnectionsByInstitution)
        .collect(Collector.of(ArrayList::new, List::addAll,
                (left, right) -> { left.addAll(right); return left; }));

关于Java-8 addAll对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36082906/

10-10 23:02