String result = service.getResult();

if (result == null) {
    DaoObject obj = crudRepository.findOne(..);
    if (obj != null) {
        result = obj.getContent();
    } else {
        throw NotFoundException();
    }
}

service.process(result);

如果 DaoObject 将是 Optional<DaoObject> ,我该怎么做才能使用 java 8 实现与上述相同的目标?
.orElseThrow(() -> new NotFoundException()); 的东西,但是上面的代码如何与流完全一致?

附带问题:我应该使用 () -> new NotFoundException() 还是 NotFoundException::new

最佳答案

你的假设是正确的。
这将导致以下代码:

Optional<DaoObject> obj = crudRepository.findOne(..);

result = obj.orElseThrow(() -> new NotFoundException()).getContent();

或者,如果您愿意,可以拆分语句以使其更具可读性:
DoaObject object = obj.orElseThrow(() -> new NotFoundException());
result = object.getContent();

请注意,() -> new NotFoundException()NotFoundException::new 完全相同,所以这只是您认为更具可读性的问题。

10-06 16:21