平面映射n阶树结构:Java流

时间:2019-01-14 18:22:54

标签: java tree java-stream flatten

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

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

此示例是我为单级展平所做的操作,但仍然不包括根节点(这是所需的)。

1 个答案:

答案 0 :(得分:1)

让我们叫你的班Node。在该类中,添加方法(假设getChildren()从不返回null):

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

然后要获取列表,您只需拨打电话

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