Java 从一个对象字段设置字符串值

Java 从一个对象字段设置字符串值,java,java-8,nullpointerexception,optional,Java,Java 8,Nullpointerexception,Optional,如何使代码看起来更好 如果存在,我想将字符串名称设置为ob1j.getX().getXX().getName(),否则我会将名称设置为obj1.getY().getYY().getYY().getName()。我还使用Optional执行空检查 这是正确的方法吗 我使用的是JDK8,所以“ifPresentOrElse”不是一个选项 String Name = null; Optional<String> optA = Optional.ofNullable(obj1.getX()

如何使代码看起来更好

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

这是正确的方法吗

我使用的是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();
    }
}
String Name=null;
Optional optA=Optional.ofNullable(obj1.getX())
.map(a->a.getXX())
.map(b->b.getName())
if(optA.isPresent()){
name=optA.get();
}否则{
Optional optB=Optional.ofNullable(obj1.getY())
.map(a->a.getYY())
.map(b->b.getYYY())
.map(c->c.getName())
if(optB.isPresent()){
name=optB.get();
}
}
您可以这样做:

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);
List<Supplier<Optional<String>>> suppliers =Arrays.asList(
            () -> Optional.ofNullable(obj1.getX()).map(X::getXX).map(XX::getName),
  () -> Optional.ofNullable(obj1.getY()).map(Y::getYY).map(YY::getYYY).map(YYY::getName));

name = suppliers.stream()
            .map(Supplier::get)
            .filter(Optional::isPresent)
            .map(Optional::get)
            .findFirst().orElse(null);

或者,对于延迟处理,您可以使用供应商,如下所示:

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);
List<Supplier<Optional<String>>> suppliers =Arrays.asList(
            () -> Optional.ofNullable(obj1.getX()).map(X::getXX).map(XX::getName),
  () -> Optional.ofNullable(obj1.getY()).map(Y::getYY).map(YY::getYYY).map(YYY::getName));

name = suppliers.stream()
            .map(Supplier::get)
            .filter(Optional::isPresent)
            .map(Optional::get)
            .findFirst().orElse(null);
List suppliers=Arrays.asList(
()->可选的.ofNullable(obj1.getX()).map(X::getXX).map(XX::getName),
()->可选.ofNullable(obj1.getY()).map(Y::getYY).map(YY::getYY).map(YY::getName));
name=suppliers.stream()
.map(供应商::获取)
.filter(可选::isPresent)
.map(可选::get)
.findFirst().orElse(null);
您可以这样做:

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);
List<Supplier<Optional<String>>> suppliers =Arrays.asList(
            () -> Optional.ofNullable(obj1.getX()).map(X::getXX).map(XX::getName),
  () -> Optional.ofNullable(obj1.getY()).map(Y::getYY).map(YY::getYYY).map(YYY::getName));

name = suppliers.stream()
            .map(Supplier::get)
            .filter(Optional::isPresent)
            .map(Optional::get)
            .findFirst().orElse(null);

或者,对于延迟处理,您可以使用供应商,如下所示:

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);
List<Supplier<Optional<String>>> suppliers =Arrays.asList(
            () -> Optional.ofNullable(obj1.getX()).map(X::getXX).map(XX::getName),
  () -> Optional.ofNullable(obj1.getY()).map(Y::getYY).map(YY::getYYY).map(YYY::getName));

name = suppliers.stream()
            .map(Supplier::get)
            .filter(Optional::isPresent)
            .map(Optional::get)
            .findFirst().orElse(null);
List suppliers=Arrays.asList(
()->可选的.ofNullable(obj1.getX()).map(X::getXX).map(XX::getName),
()->可选.ofNullable(obj1.getY()).map(Y::getYY).map(YY::getYY).map(YY::getName));
name=suppliers.stream()
.map(供应商::获取)
.filter(可选::isPresent)
.map(可选::get)
.findFirst().orElse(null);

您可以使用ifPresent方法代替Opt.ifPresent((名称)->//您想要的任何名称=Opt.get())您可以使用ifPresent方法代替Opt.ifPresent((名称)->//您想要的任何名称=Opt.get())