我们如何使用优化流来收集集合的嵌套级别和根级。
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 API
和 lambdas
不要在这里给你任何优势。
优化此流以收集
如果我正确地获得了您的的含义,"优化" 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());
});