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