有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java有没有一种优雅的方法可以打开一个包裹在两个嵌套选项中的对象?

考虑这两个类

class EmailService {
    public Optional<String> getEmailAlias(String email);
}

enum Queue {
    public static Optional<Queue> fromEmailAlias(String alias);
}

上述方法的实现对于这个问题并不重要,因此为了简单起见,我将其省略了

我想这样做:

emailService.getEmailAlias("john@done")
    .map(Queue::fromEmailAlias)
    .ifPresent(queue -> { 
        // do something with the queue instance, oh wait it's an Optional<Queue> :(
    });

但是,这不起作用,因为queue的类型为Optional<queue>(与Queue::fromEmailAlias返回的类型相同),因此我使用了以下内容:

emailService.getEmailAlias("john@done")
    .map(Queue::fromEmailAlias)
    .ifPresent(q-> { 
            q.ifPresent(queue -> {
                // do something with the queue instance
            }
    });

有点难看

更改签名

public static Optional<Queue> fromEmailAlias(String alias);

public static Queue fromEmailAlias(String alias);

这是一个快速修复方法,但这也会影响我在其他需要Optional<Queue>的地方的代码

有没有一个很好的方法来打开这个嵌套的可选文件


共 (1) 个答案

  1. # 1 楼答案

    您需要应用flatMap

    emailService.getEmailAlias("john@done")
                .flatMap(Queue::fromEmailAlias)
                .ifPresent(queue -> { 
    
                 });