小编Nic*_*ico的帖子

在Java 8中展开多个可选变量

我有以下问题.假设你有2个Optional变量

Optional<Contact> c1 = ...
Optional<Contact> c2 = ...
Run Code Online (Sandbox Code Playgroud)

以及需要2个Contact类型变量的方法

void match(Contact c1, Contact c2) {...}
Run Code Online (Sandbox Code Playgroud)

你需要打开c1和c2 Optional变量并将它们传递给match()方法.

我的问题是"在Java 8中哪种方式最优雅?"

到目前为止,我找到了两种方法:

  1. 通过使用isPresent

    if (c1.isPresent() && c2.isPresent()) {
        match(c1.get(), c2.get());
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 通过使用嵌套的ifPresent

    c1.ifPresent((Contact _c1) -> {
        c2.ifPresent((Contact _c2) -> {
            match(_c1, _c2);
        });
    });
    
    Run Code Online (Sandbox Code Playgroud)

在我看来,这两种方式都很糟糕.在Scala我可以这样做:

for {
    contact1 <- c1
    contact2 <- c2
} yield {
    match(contact1, contact2);
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法在Java 8中做到比我上面概述的更整洁?

java scala optional

14
推荐指数
2
解决办法
3562
查看次数

标签 统计

java ×1

optional ×1

scala ×1