如何修改列表中的对象<?迭代时扩展 MyObject>?

我正在尝试修改列表中选择对象中的字段,但我无法找到这样做的方法,使用普通的迭代器,因为它没有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


完成我想做的事情的正确方法是什么?


叮当猫咪
浏览 108回答 3
3回答

慕妹3242003

你根本不需要打电话set。你可以setLabel打电话curObj:// please, don't use raw types!Iterator<? extends MyObject> it = topContainer.subList.iterator();while (it.hasNext()) {&nbsp; &nbsp;MyObject curObj = it.next();&nbsp; &nbsp;if ( !curObj.getLabel().contains("/") ) {&nbsp; &nbsp; &nbsp; &nbsp;String newLabel = curObj.getLabel() + "/";&nbsp; &nbsp; &nbsp; &nbsp;curObj.setLabel(newLabel);&nbsp; &nbsp;}}

湖上湖

正确的方法如下(不适用于 1.5 以下的 java 版本):for(MyObject curObj : topContainer.subList){&nbsp; &nbsp; if (!curObj.getLabel().contains("/")) {&nbsp; &nbsp; &nbsp; &nbsp;String newLabel = curObj.getLabel() + "/";&nbsp; &nbsp; &nbsp; &nbsp;curObj.setLabel(newLabel);&nbsp; &nbsp; }}这是一个增强的 for 循环,它也调用了迭代器,但是你看不到它。也不需要通过迭代器设置对象,因为您Object在 Java 中使用对 s 的引用,当您编辑对象时,每个拥有指向该对象的指针的人也会看到更改。有关更多信息,您可以阅读这篇精彩的文章:Java 是“按引用传递”还是“按值传递”?如果您不能使用 Java 5,那么您将错失良机。当前的 java 版本是11。所以你应该真的,真的,真的,升级你的JDK

森林海

你只需要设置标签。在 JAVA 11 中,您可以使用流。它使您的代码更具可读性。List<MyObject> list = topContainer.subList;list&nbsp; &nbsp; .stream()&nbsp; &nbsp; .filter(Predicate.not(e->e.getLabel().contains("/")))&nbsp; &nbsp; .forEach(e->e.setLabel(e.getLabel()+"/"));在 Java 8 中,您可以使用(!e->e.getLabel().contains("/"))代替Predicate.not(e->e.getLabel().contains("/")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java