在Java8中与orElse成对使用map

在Java8中与orElse成对使用map,java,java-8,Java,Java 8,有两个不同的对象集合,比如说集合,比如说A,列表,比如B 如果集合包含任何对象,则需要获取第一个对象一个字符串变量,比如objectA.getName(),否则需要获取列表ObjectB.getPerson().getName()中的第一个对象,如果集合都为空,则应将null分配给该字符串 下面是我的代码: Optional<String> name1 =a.stream().findfirst().map(P->p.getName()); String output = n

有两个不同的对象集合,比如说集合,比如说A,列表,比如B

如果集合包含任何对象,则需要获取第一个对象一个字符串变量,比如objectA.getName(),否则需要获取列表ObjectB.getPerson().getName()中的第一个对象,如果集合都为空,则应将null分配给该字符串

下面是我的代码:

Optional<String> name1 =a.stream().findfirst().map(P->p.getName());

String output = null;

if (name1.ispresent()) {
    output = name1.get();    
} else {
    Optional<String> name2 =a.stream().findfirst().map(p1->p1.getPerson().getName());

    if (name2.ispresent()) {
        output = name2.get();
    }
}
可选名称1=a.stream().findfirst().map(P->P.getName());
字符串输出=null;
if(name1.ispresent()){
output=name1.get();
}否则{
可选名称2=a.stream().findfirst().map(p1->p1.getPerson().getName());
if(name2.ispresent()){
output=name2.get();
}
}
这里我得到了正确的值。请帮助我与orElse一起使用map来达到同样的效果。

这个怎么样

    Set<String> a = ...
    List<String> b = ...

    String output = a.stream()
                     .findFirst()
                     .map(p -> p.getName())
                     .orElseGet(() -> b.stream()
                                       .findFirst()
                                       .map(p1 -> p1.getPerson().getName())
                                       .orElse(null));
Set a=。。。
列表b=。。。
字符串输出=a.stream()
.findFirst()
.map(p->p.getName())
.orElseGet(()->b.stream()
.findFirst()
.map(p1->p1.getPerson().getName())
.orElse(null));

重要的部分是
可选
上的
orElseGet
方法。它的评估是懒惰的。

如果这有效,为什么要改变它?@dhanyakrishnamoorthy如果你认为它适合你的需要,你可以将它标记为答案,请参阅。