Java 8的嵌套水平流优化



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

final Set<String> groupedUsers = new HashSet<>();
groups.stream().forEach(group -> {
    groupedUsers.add(group.getTeamLeadId());
    groupedUsers.addAll(group.getTeamMemberIds().stream().collect(Collectors.toSet()));
});

不要使用 forEach将元素添加到集合中。

Set<String> groupedUsers = groups.stream()
    .flatMap(g -> Stream.concat(
        Stream.of(g.getTeamLeadId()), g.getTeamMemberIds().stream()))
    .collect(toSet());

或仅使用普通的旧(增强)进行循环。流在这里没有给您任何明显的优势。

好吧, Stream APIlambdas不要在这里给你任何优势。

优化此流以收集

如果我正确地获得了您的的含义,"优化" word,那么我会选择老式的foreach

Set<String> groupedUsers = new HashSet<>();
for (Group g : groups) {
    groupedUsers.add(g.getTeamLeadId());
    groupedUsers.addAll(g.getTeamMemberIds());
}

如果您拥有的只是锤子,那么一切看起来都像指甲。

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

groups.forEach(group -> {
  ..
});

由于投入JIT的多年循环优化,流通常比常规迭代更为昂贵。

或可能是:

    Set<String> groupedUsers = new HashSet<>();
    groups.forEach(x -> {
        groupedUsers.add(x.getTeamLeadId());
        groupedUsers.addAll(x.getTeamMemberIds());
    });

最新更新