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



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

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

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

让我们称你的类为Node。在该类中,添加方法(假设getChildren()永远不会返回null):

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

然后要获得列表,您只需致电

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

或从 Java 16 开始

rootNode.streamAll().toList();

最新更新