首页 > 解决方案 > 如何用 Optionals(函数式编程)替换我的旧 Java 代码?

问题描述

如何使用 Java 8 Optionals(函数式编程)替换以下代码?

ClassA classA = dbService.findByA(a);

if (classA == null) {
    classA = dbService.findByB(b);
}

if (classA == null) {
    throw new Exception();
}

return classA;

编辑:也许如果我将使用函数式编程findByAfindByB返回 Optional 会使我的代码更干净?

标签: javafunctional-interface

解决方案


return Optional.ofNullable(Optional.ofNullable(dbService.findByA(a))
    .orElseGet(() -> dbService.findByB(b)))
    .orElseThrow(() -> new Exception());

或者,Java 9,更好一点:

Optional.ofNullable(dbService.findByA(a))
    .or(() -> Optional.ofNullable(dbService.findByB(b)))
    .orElseThrow(() -> new Exception());

推荐阅读