是否可以将此代码转换为Java8可选的单行表达式?
long lastPollTime;
if (object != null) {
lastPollTime = object.getTime();
} else {
lastPollTime = 0;
}
i、 如果某个对象不是null,我需要调用一个对象方法并返回其结果,否则返回0<代码>可选。不可数()。orElse()不适合,因为它返回相同类型的对象,但我需要方法调用的结果或一些默认值。
long lastPollTime = Optional.ofNullable(object).map(YouObjectClass::getTime).orElse(0L);
几种形式:
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;
其中,最后一个,它不使用可选(因此没有严格回答你的问题!)更容易阅读,运行时开销更少,因此应该是首选。
可以说,如果你颠倒选项,事情就更简单了:
long lastPollTime = object == null ? 0 : object.getTime();
... 虽然您可能更喜欢最后一个默认值,但这是个人喜好的问题。
如果你真的不能使用三元运算符,而且你经常这样做,你可以编写你自己的实用方法:
public <T,U> U mapWithFallback(T obj, Function<T,U> function, U fallback) {
if(obj == null) {
return fallback;
} else {
return function.apply(obj);
}
}
...可调用为:
long lastPollTime = mapWithFallback(object, o -> o.getTime(), 0);
... 或者使用以下方法彻底嘲弄您的非永久性支票:
public <T,U> U ifElse( Supplier<Boolean> a, Supplier<U> ifTrue, Supplier<U> ifFalse) {
if(a.get()) {
return ifTrue.get();
} else {
return ifFalse.get();
}
}
long lastPollTime = ifElse( () -> object == null, () -> object.getTime(), () -> 0);
完全避免空引用会更好,因此不需要这种检查——例如使用空对象模式。
... 或者编写返回可选
而不是潜在空值的方法<代码>可选是一门很棒的课程;使用它。只是不要纯粹地将某个内容转换为可选内容
,这样您就可以立即检查它是否为空。
问题内容: 是否可以将此代码转换为Java 8可选单行表达式? 即如果某个对象不为空,我需要调用一个对象方法并返回其结果,否则返回0。 不适合,因为它返回相同类型的对象,但是我需要方法调用的结果或一些默认值。 问题答案: 几种形式: 其中,最后一个不使用Optional(因此不能严格回答您的问题!)更易于阅读,运行时开销也较小,因此应优先使用。 可以说,如果您反转选项,它甚至更简单: …尽管您可能
我已经连接表与一个 新娘模型: 计划模型: 我有一个查询将这些数据返回到endpoint。 一切都很好,除了一件事。在婚宴桌上,一些身份证上没有计划。因此,当我返回数据时,一些带有一个空的数组。 我想阻止这种情况。如果没有计划,那么我不想返回该新娘id。在这里我如何才能实现我想要的?
我有以下JPQL查询: 这应该返回所有对具有NULL的。 但是,我正在运行代码并进行调试,我看到返回的集合包含此字段为null的实体。 这是JPQL中的错误吗?
基本上,我需要从一个fxml文件中检索一个VBox,我使用的是scene.lookup。但如果我搜索它,它就会以NullPointerException崩溃。 这是我的fxml文件:
问题内容: 我有一个简单的POJO,我用REST注释进行了注释,如下所示: 请注意,包括d.getName()的日志语句实际上可以引发NPE,然后将其捕获并记录。那不是很漂亮,但这里也不是重点。 最终d是否具有值,我将其返回。 如果为空值,我的客户端会收到HTTP 204状态代码。这是wget显示的内容: 奇怪的是,我的浏览器没有动弹不得。它们仍显示前一页(我想在没有内容接收时保持原样是有意义的)
Firebase查询返回此查询的值 该项由model类捕获 但是,返回null