在Java 8 Stream API中,没有直接提供递归的方法
下面是一个使用Java 8 Stream实现的递归树形数据结构遍历的例子:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class RecursiveStreamExample {
public static void main(String[] args) {
// 构建示例数据
Node root = new Node(1);
root.getChildren().add(new Node(2));
root.getChildren().add(new Node(3));
root.getChildren().add(new Node(4));
root.getChildren().get(0).getChildren().add(new Node(5));
root.getChildren().get(0).getChildren().add(new Node(6));
root.getChildren().get(1).getChildren().add(new Node(7));
// 使用Stream和递归遍历树形数据结构
List<Integer> result = traverse(root).stream().collect(Collectors.toList());
System.out.println(result); // 输出: [1, 2, 5, 6, 3, 4, 7]
}
private static List<Node> traverse(Node node) {
List<Node> result = new ArrayList<>();
result.add(node);
node.getChildren().stream().forEach(child -> result.addAll(traverse(child)));
return result;
}
public static class Node {
private int value;
private List<Node> children;
public Node(int value) {
this.value = value;
this.children = new ArrayList<>();
}
public int getValue() {
return value;
}
public List<Node> getChildren() {
return children;
}
}
}
在这个例子中,我们定义了一个Node
类来表示树形结构的节点,并实现了traverse
方法来递归遍历这个树形结构。traverse
方法首先将当前节点添加到结果列表中,然后使用Stream API并行地遍历当前节点的所有子节点,并对每个子节点递归调用traverse
方法,将结果合并到结果列表中。
领取专属 10元无门槛券
手把手带您无忧上云