我有一些使用 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”或“可选读写”的方式来处理这种情况(本质上是计算最终操作都需要多个选项)?
我想流三Optional
s 太过分了,为什么不简单一点
if (maybeTarget.isPresent() && maybeSourceName.isPresent() && maybeEventName.isPresent()) {
...
}
在我看来,与使用流 API 相比,这更清楚地表述了条件逻辑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)