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