如何修改List <!-中的对象?在迭代时扩展MyObject->?

时间:2019-01-11 07:36:58

标签: java iteration listiterator

我正在尝试修改列表中选择对象中的字段,但是我找不到使用纯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

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

3 个答案:

答案 0 :(得分:3)

您根本不需要致电<script> $('#quantity').click(function () { var number = $(this).val(); var o_val = $("#unit_pricea").val(); var op_val = number * o_val; $("#amounta").val(op_val); console.log(op_val); }); </script> 。您只需在set上致电setLabel

curObj

答案 1 :(得分:2)

正确的方法如下(不适用于1.5以下的Java版本):

for(MyObject curObj : topContainer.subList){
    if (!curObj.getLabel().contains("/")) {
       String newLabel = curObj.getLabel() + "/";
       curObj.setLabel(newLabel);
    }
}

这是一个增强的for循环,它也确实调用了迭代器,但是您看不到它。

也不需要通过迭代器设置对象,因为您正在使用Java中对Object的引用,因此在编辑对象时,每个拥有指向该对象的指针的人都将看到更改太。有关更多信息,您可以阅读以下精彩文章:Is Java “pass-by-reference” or “pass-by-value”?

  

如果您不能使用Java 5,那么您将浪费很多时间。当前的Java版本是 11 。因此,您应该真的,真的,真的要升级您的JDK

答案 2 :(得分:1)

您只需要设置标签。在JAVA 11中,您可以使用流。它使您的代码更具可读性。

List<MyObject> list = topContainer.subList;
list
    .stream()
    .filter(Predicate.not(e->e.getLabel().contains("/")))
    .forEach(e->e.setLabel(e.getLabel()+"/"));

在Java 8中,您可以使用

(!e->e.getLabel().contains("/"))

代替

Predicate.not(e->e.getLabel().contains("/")