如何使用 Java 8 可选,在三个都存在的情况下执行操作?

2024-04-13

我有一些使用 Java 可选的(简化的)代码:

Optional<User> maybeTarget = userRepository.findById(id1);
Optional<String> maybeSourceName = userRepository.findById(id2).map(User::getName);
Optional<String> maybeEventName = eventRepository.findById(id3).map(Event::getName);

maybeTarget.ifPresent(target -> {
    maybeSourceName.ifPresent(sourceName -> {
        maybeEventName.ifPresent(eventName -> {
            sendInvite(target.getEmail(), String.format("Hi %s, $s has invited you to $s", target.getName(), sourceName, meetingName));
        }
    }
}

不用说,这看起来和感觉都很糟糕。但我想不出另一种方法以更少嵌套且更具可读性的方式做到这一点。我考虑过流式传输 3 个可选选项,但放弃了这个想法.filter(Optional::isPresent) then a .map(Optional::get)感觉更糟。

那么是否有更好、更“Java 8”或“可选读写”的方式来处理这种情况(本质上是计算最终操作都需要多个选项)?


我想流三Optionals 太过分了,为什么不简单一点

if (maybeTarget.isPresent() && maybeSourceName.isPresent() && maybeEventName.isPresent()) {
  ...
}

在我看来,与使用流 API 相比,这更清楚地表述了条件逻辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Java 8 可选,在三个都存在的情况下执行操作? 的相关文章

随机推荐