如何使用Java 8的Optionals,如果全部三个都存在则执行一个操作?

7 浏览
0 Comments

如何使用Java 8的Optionals,如果全部三个都存在则执行一个操作?

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

Optional maybeTarget = 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来计算最终操作)?

0