我正在尝试修改列表中选择对象中的字段,但是我找不到使用纯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
完成我想做的事情的正确方法是什么?
答案 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("/")