当前位置:  开发笔记 > 编程语言 > 正文

Java如果object不为null,则为可选 - 返回方法结果,如果为null,则返回默认值

如何解决《Java如果object不为null,则为可选-返回方法结果,如果为null,则返回默认值》经验,为你挑选了4个好方法。

是否可以将此代码转换为java 8可选的单行表达式?

long lastPollTime;
if (object != null) {
    lastPollTime = object.getTime();
} else {
    lastPollTime = 0;
}

即如果某个对象不为null,我需要调用object方法并返回其结果,否则返回0. Optional.ofNullable().orElse()不合适,因为它返回相同类型的对象,但我需要方法调用的结果或一些默认值.



1> slim..:

一些形式:

long lastPollTime = Optional.ofNullable(object).map(o -> o.getTime()).orElse(0L);

long lastPollTime = Optional.ofNullable(object).map(YouObjectClass::getTime).orElse(0L);

long lastPollTime = Optional.ofNullable(object).isPresent() ? object.getTime() : 0;

long lastPollTime = object != null ? object.getTime() : 0;

其中,最后一个不使用Optional(因此不严格回答你的问题!),阅读起来更简单,运行时开销更少,因此应该首选.

可以说,如果你颠倒选项,它会更简单:

long lastPollTime = object == null ? 0 : object.getTime();

...虽然你可能更喜欢默认的最后一个 - 这是个人品味的问题.


如果你真的不能使用三元运算符,并且你做了很多,你可以编写自己的实用程序方法:

public  U mapWithFallback(T obj, Function function, U fallback) {
    if(obj == null) {
        return fallback;
    } else {
        return function.apply(obj);
    }
}

......可以调用:

long lastPollTime = mapWithFallback(object, o -> o.getTime(), 0);

...或使用以下方法对您的非三元检查进行完全嘲弄:

public  U ifElse( Supplier a, Supplier ifTrue, Supplier ifFalse) {
     if(a.get()) {
          return ifTrue.get();
     } else {
          return ifFalse.get();
     }
}

long lastPollTime = ifElse( () -> object == null, () -> object.getTime(), () -> 0);

它完全避免了空引用,因此不需要这种检查 - 例如使用Null Object模式.



2> Vlad Bocheni..:
long lastPollTime = Optional.ofNullable(object).map(YouObjectClass::getTime).orElse(0L);



3> F. Lumnitz..:
long lastPollTime = Optional.ofNullable(object).map(o -> o.getTime()).orElse(0L);

而不是o -> o.getTime()你可以使用像方法参考ClassOfObject::getTime



4> 小智..:
long lastPollTime = object != null ?object.getTime():0;


我在这个表达式中看不到任何可选:)我明白这是最短的,也可能是最有效的方法,但在我看来这是不可接受的,不幸的是
推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有