gpt4 book ai didi

java - 遍历集合中的集合,直到 Java 中的最后一个元素

转载 作者:行者123 更新时间:2023-11-29 08:31:04 26 4
gpt4 key购买 nike

我有这门课:

public class SimpleEntity {
private String id;
private String name;
private boolean closed;
private List<SimpleEntity > simpleEntityChildren;
}

我想递归地迭代到 SimpleEntityChildren 直到最后一个元素,但我不知道如何实现它。

public void iterator(SimpleEntity simpleEntity ){
simpleEntity .forEach(entity-> {
if(!entity.getSimpleEntityChildren.isEmpty()){
entity.forEach(secondEntity-> {
if(!secondEntity.getSimpleEntityChildren.isEmpty()){
//and so on to the last element
}
});
}
});
}

最佳答案

进行递归调用:

public void iterate(SimpleEntity entity) {
// you might want to add some logic here, that actually does something
// with the current SimpleEntity instance you are iterating over
for (SimpleEntity child : entity.getSimpleEntityChildren()) {
iterate(child);
}
}

请注意,这会导致无限递归和 StackOverflowError如果所有 SimpleEntity 的图中都有环实例。

正如鲍里斯评论的那样,您可以将 Consumer<SimpleEntity> 传递给方法, 这将包含要在每个 SimpleEntity 上执行的逻辑实例。

public void iterate(SimpleEntity entity, Consumer<SimpleEntity> consumer) {
consumer.accept(entity);
for (SimpleEntity child : entity.getSimpleEntityChildren()) {
iterate(child,consumer);
}
}

例如,您可以递归打印所有 SimpleEntity 的名称给定 SimpleEntity 的层次结构中的实例实例:

SimpleEntity someEntity = ...
iterate(someEntity, e -> System.out.println(e.getName()));

您还可以添加一个非递归方法来启动迭代过程:

public void iterate(Consumer<SimpleEntity> consumer) {
iterate(this,consumer);
}

现在你可以写:

SimpleEntity someEntity = ...
someEntity.iterate(e -> System.out.println(e.getName()));

关于java - 遍历集合中的集合,直到 Java 中的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48186149/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com