首页 > 解决方案 > 从对象中获取非空值

问题描述

假设我有一个Foo有 X 和 X 有 Y 的类。我只想从 X 中获取 Y,除非不是foo.getX()这样,如下所示:nullnull

Y y = getNonNullValue(foo.getX(), X::getY);

所以我不必这样做:

if (foo.getX() != null) {
    Y y = foo.getX().getY();
}

我有以下代码

public <T, R> R getNonNullValue(final T t, final Supplier<R> supplier) {
    return ; // What to write here?
}

commons-lang或任何其他库是否具有类似的功能?

标签: javanullpointerexceptionnull

解决方案


我不明白你的问题,但我想你需要这个:

public <T, R> R getNonNullValue(final T t, final Function<T, R> mapper) {
    return Optional.ofNullable(t)
                    .map(mapper)
                    .orElse(null);
}

或者按照 jesper 的建议:

public <T, R> R getNonNullValue(final T t, final Supplier<R> supplier) {
        return t != null ? supplier.get() : null;
}

推荐阅读