首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面向嵌套级的Java 8流优化

面向嵌套级的Java 8流优化
EN

Stack Overflow用户
提问于 2018-12-19 11:13:50
回答 4查看 295关注 0票数 1

如何使用优化此流来收集集合的嵌套级别和根级别。

代码语言:javascript
复制
final Set<String> groupedUsers = new HashSet<>();
groups.stream().forEach(group -> {
    groupedUsers.add(group.getTeamLeadId());
    groupedUsers.addAll(group.getTeamMemberIds().stream().collect(Collectors.toSet()));
});
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-12-19 11:17:54

不要使用forEach向集合添加元素。

代码语言:javascript
复制
Set<String> groupedUsers = groups.stream()
    .flatMap(g -> Stream.concat(
        Stream.of(g.getTeamLeadId()), g.getTeamMemberIds().stream()))
    .collect(toSet());

或者只需使用普通的旧(增强) for循环即可。溪流在这里并没有给你任何明显的优势。

票数 8
EN

Stack Overflow用户

发布于 2018-12-19 11:27:01

嗯,Stream APIlambdas在这里不给你任何优势。

优化此流以收集

如果我正确地理解了您的“优化”单词的含义,那么我将使用旧风格的foreach

代码语言:javascript
复制
Set<String> groupedUsers = new HashSet<>();
for (Group g : groups) {
    groupedUsers.add(g.getTeamLeadId());
    groupedUsers.addAll(g.getTeamMemberIds());
}

如果你只有一把锤子,一切看起来都像钉子。

票数 1
EN

Stack Overflow用户

发布于 2018-12-19 11:20:49

您可以跳过groups.stream().forEach()中的流创建,因为Iterable.forEach()

代码语言:javascript
复制
groups.forEach(group -> {
  ..
});

由于多年的循环优化投入到JIT中,流通常比常规迭代花费更大。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53850072

复制
相关文章

相似问题

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