查找并修改ArrayList中的特定元素

Den*_*nov 3 java arrays lambda

有一些优雅的方法来查找和修改java中的某些特定对象吗?我有这样的方法:

public update(MyObj o) {
   for (MyObj objToModify: DATA) {
       if (objToModify.getId() == o.getId()) {
           objToModify.setName(o.getName());
           // and so on ...
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

例如,是否可以重写为 lambda 或 Java 8 的某些其他功能?我有很多属性,所以我更喜欢一些我无法手动设置所有新属性的选项。

Ole*_*leg 5

您可以通过以下方式执行此操作,即使有多个匹配,这也会遍历整个流并更新元素:

DATA.stream().filter(a -> a.getId() == o.getId()).forEach(a -> a.setName(o.getName()));
Run Code Online (Sandbox Code Playgroud)

或者,如果您确定只需要更新一个元素:

DATA.stream().filter(a -> a.getId() == o.getId()).
    findAny().ifPresent(a -> a.setName(o.getName()));
Run Code Online (Sandbox Code Playgroud)

NullPointerException如果 DATA 具有与原始解决方案相同的 null 元素,则两种解决方案都会抛出异常,如果这是一种可能性并且您想阻止它,您还需要a检查filter.