编程语言
首页 > 编程语言> > 用Java 8在一行中构建一组Node.Leaf.Id

用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