【发布时间】:2019-01-11 07:36:57
【问题描述】:
我正在尝试修改 List 中选择对象中的字段,但我无法使用普通 Iterator 找到这样做的方法,因为它没有 set() 方法。
我尝试使用提供set() 方法的ArrayListIterator,但这会引发转换异常。有没有办法解决这个问题?
Iterator it = topContainer.subList.iterator();
while (it.hasNext()) {
MyObject curObj = (MyObject) it.next();
if ( !curObj.getLabel().contains("/") ) {
String newLabel = curObj.getLabel() + "/";
curObj.setLabel(newLabel);
((ArrayListIterator) it).set(curObj)
}
}
我希望列表中的原始当前对象可以顺利设置,但我得到了这个异常:
java.util.ArrayList$itr 不能转换为 org.apache.commons.collections.iterators.ArrayListIterator
完成我想做的事情的正确方法是什么?
【问题讨论】:
-
curObj.setLabel(newLabel);应该足够了。您想要的只是更改对象上的标签,您不需要在列表中用自身覆盖对象 -
MyObject类有字段标签的设置器吗?setLabel? -
你想达到什么目的?您可以遍历数组列表并修改对象。您不需要将对象设置为迭代器
-
@ernest_k 您的建议仅修改通过迭代器从列表中获取的原始对象的副本。我不会修改原来的。
-
@Introspective 它确实修改了原件。
MyObject是一堂课吧?
标签: java iteration listiterator