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

时间:2017-10-28 16:28:05

标签: java arrays lambda

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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()));

如果DATA具有与原始解决方案相同的null元素,则两个解决方案都将抛出NullPointerException,如果它是可信的并且您想要阻止它,则还需要检查a中的filter是否为空{1}}。

答案 1 :(得分:2)

您可以使用lambda表达式来执行您要执行的操作

public update(MyObj o) {

    DATA.forEach(objToModify -> {

        if (objToModify.getId() == o.getId()) {
            objToModify.setName(o.getName());
            // and so on ...
        }
    });   
}

虽然我不确定在您的情况下使用lambda expression是否比使用for-each循环更有效。