gpt4 book ai didi

Java用未知索引替换arraylist中的对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:05:33 25 4
gpt4 key购买 nike

我有一个 DocObject 类型的对象,其中包含一个名为 children 的 DocObject 数组列表,每个对象本身可能包含也可能不包含子对象。我正在为此对象编写一个名为 replace() 的函数,它需要一个要搜索的子项,如果 DocObject 包含该子项,则该子项应替换为 newObj。我环顾了该网站并搜索了谷歌,但我所看到的一切都不起作用。下面的代码显示了我的尝试:

public void replace(DocObject oldObj, DocObject newObj) {
for (DocObject child : children ) {
if (child == oldObj) {
child = newObj;
}
}
}

还有这个(这会导致溢出异常):

public void replace(DocObject oldObj, DocObject newObj) {
if (children.indexOf(oldObj) != -1)
children.set(children.indexOf(oldObj), newObj);
for (DocObject child : children)
child.replace(oldObj, newObj);
}

但是,这并没有替换子项,我已经检查过 if 语句是否正常工作并且满足其条件。如何用 newObj 替换 oldObj?

最佳答案

我不建议在操作列表时使用 for (X x: thingWithXs) 结构进行循环。我建议使用 indexOf 来搜索所需的对象,如果找不到,则递归调用您正在查看的对象的子项上的替换。

请注意,您必须修改 replace 方法以接受对象列表作为参数:

public boolean replace(List<E> list, E oldE, E newE) {
if (list == null) {
return false;
}
int index = list.indexOf(oldE);
if (index > 0) {
list.set(index, newE);
return true;
}
for (int i = 0, l = list.size(); i < l; i++) {
List<E> children = list.get(i).children;
if (replace(children, oldE, newE)) {
return true;
}
}
return false;
}

免责声明:以上代码尚未经过测试。它应该能让您了解如何完成。本质上,它归结为检查您要查找的元素是否在列表中,如果不在列表中,则遍历列表并检查每组子元素。

关于Java用未知索引替换arraylist中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22188431/

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