我有2个实体:
我有一个
Collection<Node>
,我正在尝试在一行代码中构建所有Set<Integer>
id的Leaf
。我觉得Stream
可能是可行的,但是直到现在,我只能像这样点它:Set<Integer> leafIds = Sets.newHashSet();
root.getNodes()
.forEach(node -> node.getLeaves()
.forEach(leaf -> leafIds.add(leaf.getId())));
我不喜欢手动创建集合并使用
Collection.add()
方法向其中添加元素的部分(不是线程安全,危险且未优化的)。我觉得有可能做类似的事情:root.getNodes()
.stream()
.???
.getLeaves()
.map(Leaf::getId)
.distinct()
.collect(Collectors.toSet());
任何想法?
最佳答案
有可能的。使用flatMap
,您可以从这些节点的所有叶子的Stream<Node>
转换为Stream<Leaf>
:
Set<Integer> leaves = root.getNodes().stream()
.flatMap (n -> n.getLeaves().stream())
.distinct()
.map(Leaf::getId)
.collect(Collectors.toSet());
关于java - 使用Java 8在一行中构建一组Node.Leaf.Id,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26483324/