【发布时间】:2020-04-29 13:19:16
【问题描述】:
private void doSomething(someProcessModel process){
CustomerModel customer = process.getCustomerModel();
customer.getFoos().stream()
.filter(foo -> foo.getCountryCode().equals(process.getCountryCode()))
.findFirst()
.ifPresent(foo -> {
if(foo.getSomeNumber() == null){
foo.setSomeNumber("1234567");
modelService.save(foo);
}
});
}
如上面的代码 sn-p 所示,我有一个具有属性“Foos”的“CustomerModel”。这是一对多的关系。正如你所看到的,我已经做了一些过滤,最后,如果它为空,我想更新 'Foo' 的 'someNumber' 属性的值。我已经确认一切正常,因为“someNumber”属性的值在调试期间更新。它根本没有保存,因为我已经在 HMC 中进行了检查。我还验证了拦截器没有任何会引发错误的条件。日志中也没有显示任何内容。
我想知道在“ifPresent()”方法中执行“modelService.save()”是否合法?这里可能存在什么问题?
【问题讨论】:
-
当然,如果设计不当也是合法的。但是只有当找到这样一个匹配的
foo并且它的初始someNumber是null时,它才会保存foo。 -
另一方面,你可能想写
customer.getFoos().stream() .filter(foo -> foo.getCountryCode().equals(process.getCountryCode())) .findFirst() .map(foo -> updatedFoo(foo)) // mutate or return new instance from here .ifPresent(foo -> modelService.save(foo));
标签: java-stream optional hybris