用Java 8在一行中构建一组Node.Leaf.Id
作者:互联网
我有2个实体:
>叶子
>节点,其中包含叶子.
我有一个Collection< Node>并且我正在尝试构建Set< Integer>一行代码中所有Leaf id的集合.我觉得使用Streams可能有可能,但是直到现在,我只能这样点它:
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-8,java 来源: https://codeday.me/bug/20191121/2049479.html