Java 查找并修改ArrayList中的特定元素
是否有一种优雅的方法可以在java中查找和修改某些特定对象?我有这样的方法:Java 查找并修改ArrayList中的特定元素,java,arrays,lambda,Java,Arrays,Lambda,是否有一种优雅的方法可以在java中查找和修改某些特定对象?我有这样的方法: public update(MyObj o) { for (MyObj objToModify: DATA) { if (objToModify.getId() == o.getId()) { objToModify.setName(o.getName()); // and so on ... } } } 例如,是否可以重写为lamb
public update(MyObj o) {
for (MyObj objToModify: DATA) {
if (objToModify.getId() == o.getId()) {
objToModify.setName(o.getName());
// and so on ...
}
}
}
例如,是否可以重写为lambda或Java8的某些其他功能?我有很多属性,因此我会选择一些无法手动编写的选项来设置所有新属性。您可以通过以下方式执行此操作,这将覆盖整个流并更新元素,即使有多个匹配项:
DATA.stream().filter(a -> a.getId() == o.getId()).forEach(a -> a.setName(o.getName()));
或者,如果您确定只需要更新一个元素:
DATA.stream().filter(a -> a.getId() == o.getId()).
findAny().ifPresent(a -> a.setName(o.getName()));
两种解决方案都将抛出
NullPointerException
如果数据具有与原始解决方案相同的null元素,如果它是一种可能性,并且您想要阻止它,那么您还需要检查filter
中的a
是否不为null。您可以使用lambda表达式来执行您试图执行的操作
public update(MyObj o) {
DATA.forEach(objToModify -> {
if (objToModify.getId() == o.getId()) {
objToModify.setName(o.getName());
// and so on ...
}
});
}
虽然我不确定在您的案例中使用
lambda表达式是否比在每个循环中使用更有效。建议-不应局限于findFirst
@nullpointer不确定OP想要什么,但我将您的建议整合到了答案中。我已根据正确性需要更新了我的问题,是否可以在不手动写入setID、setName、setDate等的情况下自动更新映射绑定属性?@DenisStephanov如果需要在某个地方执行此操作,您可以向MyObj添加一个方法
@Oleg我有最后一个问题,如果我想设置更多属性而不仅仅是名称,该怎么办?你能编辑这个例子吗?看起来你最好使用地图
直接访问对象。你能给我一个例子作为答案吗?