可选地获取字段
Optionally getting field
我有这样的 class 结构:
public class Foo {
private FooB foob;
public Optional<FooB> getFoob() {
return Optional.ofNullable(foob);
}
}
public class FooB {
private int valA;
public int getValA() {
return valA;
}
}
我的objective是调用fooB
的get方法,然后检查它是否存在。如果存在,则 return valA
属性,如果不存在,则 return 为空。所以像这样:
Integer valA = foo.getFoob().ifPresent(getValA()).orElse(null);
当然这不是正确的 Java 8 可选语法,但这是我的 "psuedo code"。有什么方法可以在 Java 8 中用 1 行实现这个吗?
你描述的是方法 Optional.map
:
Integer valA = foo.getFoob().map(foo -> foo.getValA()).orElse(null);
如果值存在,map
允许您使用函数转换 Optional
中的值,如果值不存在,return 是一个空的可选值。
另请注意,您可以从映射函数中 return null,在这种情况下,结果将为 Optional.empty()
。
为什么不在 class Foo
中添加 getValue
方法?这将是一种授权。
public class Foo {
...
public Integer getValue() {
if (foob == null) {
return null;
}
return foob.getValA();
}
}
我有这样的 class 结构:
public class Foo {
private FooB foob;
public Optional<FooB> getFoob() {
return Optional.ofNullable(foob);
}
}
public class FooB {
private int valA;
public int getValA() {
return valA;
}
}
我的objective是调用fooB
的get方法,然后检查它是否存在。如果存在,则 return valA
属性,如果不存在,则 return 为空。所以像这样:
Integer valA = foo.getFoob().ifPresent(getValA()).orElse(null);
当然这不是正确的 Java 8 可选语法,但这是我的 "psuedo code"。有什么方法可以在 Java 8 中用 1 行实现这个吗?
你描述的是方法 Optional.map
:
Integer valA = foo.getFoob().map(foo -> foo.getValA()).orElse(null);
如果值存在,map
允许您使用函数转换 Optional
中的值,如果值不存在,return 是一个空的可选值。
另请注意,您可以从映射函数中 return null,在这种情况下,结果将为 Optional.empty()
。
为什么不在 class Foo
中添加 getValue
方法?这将是一种授权。
public class Foo {
...
public Integer getValue() {
if (foob == null) {
return null;
}
return foob.getValA();
}
}