首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java-8 addAll对象

Java-8 addAll对象
EN

Stack Overflow用户
提问于 2016-03-18 11:12:19
回答 2查看 6.5K关注 0票数 12

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

代码语言:javascript
运行
复制
final List<InstitutionUserConnection> allInstitutionUserConnections = new ArrayList<>();
for (final Institution institution : institutionsOfUser) {
    allInstitutionUserConnections
        .addAll(institutionUserConnectionService.getActiveInstitutionUserConnectionsByInstitution(institution));
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-31 11:41:45

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

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

代码语言:javascript
运行
复制
List<InstitutionUserConnection> result = institutionsOfUser.stream().
        .map(institutionUserConnectionService::getActiveInstitutionUserConnectionsByInstitution)
        .collect(Collector.of(ArrayList::new, List::addAll,
                (left, right) -> { left.addAll(right); return left; }));
票数 6
EN

Stack Overflow用户

发布于 2016-03-18 11:13:40

是的,这就是flatMap操作的目的:

代码语言:javascript
运行
复制
List<InstitutionUserConnection> allInstitutionUserConnections =
    institutionsOfUser.stream()
                      .flatMap(institution -> institutionUserConnectionService.getActiveInstitutionUserConnectionsByInstitution(institution).stream())
                      .collect(Collectors.toList());

如果该方法抛出一个已检查的异常,则需要捕获它并通过日志记录来处理它,重新抛出一个未检查的异常并/或返回一个默认值。

代码语言:javascript
运行
复制
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());
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36082906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档