3 回答
TA贡献1824条经验 获得超6个赞
你根本不需要打电话set。你可以setLabel打电话curObj:
// please, don't use raw types!
Iterator<? extends MyObject> it = topContainer.subList.iterator();
while (it.hasNext()) {
MyObject curObj = it.next();
if ( !curObj.getLabel().contains("/") ) {
String newLabel = curObj.getLabel() + "/";
curObj.setLabel(newLabel);
}
}
TA贡献2003条经验 获得超2个赞
正确的方法如下(不适用于 1.5 以下的 java 版本):
for(MyObject curObj : topContainer.subList){
if (!curObj.getLabel().contains("/")) {
String newLabel = curObj.getLabel() + "/";
curObj.setLabel(newLabel);
}
}
这是一个增强的 for 循环,它也调用了迭代器,但是你看不到它。
也不需要通过迭代器设置对象,因为您Object在 Java 中使用对 s 的引用,当您编辑对象时,每个拥有指向该对象的指针的人也会看到更改。有关更多信息,您可以阅读这篇精彩的文章:Java 是“按引用传递”还是“按值传递”?
如果您不能使用 Java 5,那么您将错失良机。当前的 java 版本是11。所以你应该真的,真的,真的,升级你的JDK
TA贡献2011条经验 获得超2个赞
你只需要设置标签。在 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("/")
添加回答
举报