如何使用Java 8的Optionals,如果全部三个都存在则执行一个操作?
如何使用Java 8的Optionals,如果全部三个都存在则执行一个操作?
我有一些使用Java Optionals的(简化的)代码:
OptionalmaybeTarget = userRepository.findById(id1); Optional maybeSourceName = userRepository.findById(id2).map(User::getName); Optional 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个Optionals,但是觉得用.filter(Optional::isPresent)
然后使用.map(Optional::get)
感觉更糟糕。
那么,有没有更好、更符合'Java 8'或'Optional-literate'的方式来处理这种情况(基本上需要多个Optionals来计算最终操作)?