从任一对象字段设置字符串值

问题描述 投票:1回答:1

如何使我的代码看起来更好?

我想将字符串名称设置为ob1j.getX()。getXX()。getName()(如果存在),否则我将名称设置为obj1.getY()。getYY()。getYYY()。getName() 。我还使用Optional来执行null检查。

这是正确的方法吗?

我正在使用JDK8,因此无法选择'ifPresentOrElse'。

String Name = null;

Optional<String> optA = Optional.ofNullable(obj1.getX())
        .map(a -> a.getXX())
        .map(b -> b.getName())

if (optA.isPresent()) {
    name = optA.get();
} else {
    Optional<String> optB = Optional.ofNullable(obj1.getY())
        .map(a -> a.getYY())
        .map(b -> b.getYYY())
        .map(c -> c.getName())
    if (optB.isPresent()) {
        name = optB.get();
    }
}
java java-8 nullpointerexception optional
1个回答
0
投票

您可以这样:

name = Stream.of(
            Optional.ofNullable(obj1.getX()).map(X::getXX).map(XX::getName),
            Optional.ofNullable(obj1.getY()).map(Y::getYY).map(YY::getYYY).map(YYY::getName)
    )
     .filter(Optional::isPresent)
     .map(Optional::get)
     .findFirst().orElse(null);
© www.soinside.com 2019 - 2024. All rights reserved.