假设我有一个非二叉树结构(每个节点可能有n
个子节点)。从这种意义上讲,使用java 流将整棵树压扁成单个列表的一种好方法是什么?
rootNode.getChildren().stream()
.flatMap(node -> node.getChildren().stream())
.collect(Collectors.toList());
此示例是我为单级展平所做的操作,但仍然不包括根节点(这是所需的)。
答案 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());