通过List-Elements递归,也可以包含List

时间:2016-06-28 10:07:27

标签: java recursion

我正在寻找一种合适的递归方式来实现以下目标: 元素A可以具有列表L1,其包含诸如A的其他元素,例如, B,C和D.这些元素(B,C和D)也可以有List L2,L3,L4。 所以我也需要通过这些列表。 背景是我希望从名称末尾包含“LB”的所有元素的所有列表中获取所有对象(由getName()检索)。列表中的所有对象具有相同的类型。 我是如何实现这一目标的?由于我不知道会有多少元素和列表,我认为递归解决方案是唯一适当的解决方案?

2 个答案:

答案 0 :(得分:1)

基本上你有一个树形结构,这意味着你可能需要某种形式的树遍历。让我们假设我们有这种树状结构:

class Node<T>{
  T value;
  List<Node<T>> children = new ArrayList<>();
}

现在,如果要将回调C应用于每个节点,您将执行以下操作:

public <T> void visit(Node<T> rootNode, Consumer c){
   c.consume(rootNode.value);
   rootNode.children.forEach(n -> visit(n, c));
}

这称为深度优先遍历。

答案 1 :(得分:0)

您可以使用flatmap: https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#flatMap-java.util.function.Function-

哪个“扁平化”列表/数组。

例如:

l1.stream().flatMap(Collection::stream).map(e-> e.getName()).filter(e -> e.contains("LB")).collect(Collectors.joining());