java - 可选地获取字段

标签 java java-8 option-type consumer

我有这样一个类结构:

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;
    }
}

我的目标是调用 fooB 的 get 方法,然后检查它是否存在。如果存在则返回 valA 属性,如果不存在则返回 null。所以像这样:

Integer valA = foo.getFoob().ifPresent(getValA()).orElse(null);

当然这不是正确的 Java 8 可选语法,但这是我的“伪代码”。有什么方法可以在 Java 8 中用 1 行实现这一点?

最佳答案

您描述的是方法 Optional.map :

Integer valA = foo.getFoob().map(foo -> foo.getValA()).orElse(null);

map 允许您在 Optional 中转换值(如果该值存在),如果该值不存在则返回一个空的可选值。

另请注意,您可以从映射函数返回 null,在这种情况下,结果将为 Optional.empty()

关于java - 可选地获取字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37969456/

相关文章:

swift - 仅当变量的当前值非 nil 时才更改 Swift

java-8 - FreeMarker Java 8 可选值支持

java - 从命令行执行java程序时文件不写入

java - try-with-resources 总是会关闭资源

Java - 根据唯一 ID 收集、删除类的属性(全部扩展父类(super class))

java - 如何将参数化匿名类转换为 lambda?

ios - 具有 bool 值的字典的 Swift 优雅条件

java - bean 数组 eclipse scout 示例

java - 对参数传递感到困惑

java - 如何将不兼容类型的对象流式传输到列表中?