【问题标题】:Flatmaping a n-order tree structure : Java Streams [duplicate]平面映射 n 阶树结构:Java Streams [重复]
【发布时间】:2019-06-08 18:32:05
【问题描述】:

假设我有一个非二叉树结构(每个节点可能有n 子节点)。从这个意义上说,使用 java streams 将整个树扁平化为单个列表的好方法是什么?

rootNode.getChildren().stream()
    .flatMap(node -> node.getChildren().stream())
    .collect(Collectors.toList());

这个例子是我为单层展平所做的,但仍然不包括根节点(这是需要的)。

【问题讨论】:

  • @Ricola 不以任何方式使用流。怎么可能是骗子?
  • 投票第二多的答案(实际上是我的)使用流。无论如何,我在这里复制并改编它作为答案。
  • @Ricola 有一个特定的标题可以帮助有人在谷歌上搜索这个,就像我刚才一样

标签: java tree java-stream flatten


【解决方案1】:

让我们给你的班级打电话Node。在该类中,添加方法(假设 getChildren() 永远不会返回 null):

public Stream<Node> streamAll(){
    return Stream.concat(Stream.of(this), getChildren().stream().flatMap(Node::streamAll));
}

然后要得到一个列表,你可以简单地调用

rootNode.streamAll().collect(Collectors.toList());

【讨论】:

    猜你喜欢
    • 2012-11-26
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    相关资源
    最近更新 更多