是一种在java中查找和修改某些特定对象的优雅方法吗?我有这样的方法:
public update(MyObj o) {
for (MyObj objToModify: DATA) {
if (objToModify.getId() == o.getId()) {
objToModify.setName(o.getName());
// and so on ...
}
}
}
是否可以重写为lambda,例如Java 8的其他功能?我有很多属性,所以我更喜欢一些选项,我无法手动编写所有新属性。
答案 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
循环更有效。