是否可以将此代码转换为Java 8可选单行表达式?
long lastPollTime;
if (object != null) {
lastPollTime = object.getTime();
} else {
lastPollTime = 0;
}
即如果某个对象不为空,我需要调用一个对象方法并返回其结果,否则返回0。
Optional.ofNullable().orElse()
不适合,因为它返回相同类型的对象,但是我需要方法调用的结果或一些默认值。
几种形式:
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 <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);
最好完全避免使用null引用,这样就不需要这种检查了,例如使用Null
Object模式
。
…或通过编写返回Optional
而不是返回空值的方法。Optional
是一个伟大的阶级;用它。只是不要将某些内容Optional
完全转换为纯文本,这样您就可以立即检查它是否为空。
是否可以将此代码转换为Java8可选的单行表达式? i、 如果某个对象不是null,我需要调用一个对象方法并返回其结果,否则返回0<代码>可选。不可数()。orElse()不适合,因为它返回相同类型的对象,但我需要方法调用的结果或一些默认值。
我已经连接表与一个 新娘模型: 计划模型: 我有一个查询将这些数据返回到endpoint。 一切都很好,除了一件事。在婚宴桌上,一些身份证上没有计划。因此,当我返回数据时,一些带有一个空的数组。 我想阻止这种情况。如果没有计划,那么我不想返回该新娘id。在这里我如何才能实现我想要的?
基本上,我需要从一个fxml文件中检索一个VBox,我使用的是scene.lookup。但如果我搜索它,它就会以NullPointerException崩溃。 这是我的fxml文件:
Firebase查询返回此查询的值 该项由model类捕获 但是,返回null
问题内容: 在MySQL中,是否可以将“总计”字段设置为零(如果它们为NULL)? 这是我所拥有的: 数据输出正常,但NULL字段应为。 如何在MySQL中为NULL返回0? 问题答案: 使用IFNULL: 从文档中: 如果expr1不为NULL,则IFNULL()返回expr1; 否则返回expr2。IFNULL()返回数字或字符串值,具体取决于使用它的上下文。
我使用JOOQ查询多对多关系,需要将一个条目的多个结果映射到单个对象中。为此,我使用唯一标识符将结果分组,并从每个分组的结果中提取所需的数据。对于多对多数据,我得到所有可用值,对于正常数据,我只使用第一个条目的数据: 现在,我虽然每个条目可以有多个组,但它不需要有任何组,以下将是一个有效的条目,无需设置任何组: 奇怪的是,我注意到在这种情况下返回一个包含的List,而不是一个空列表。 这是有意的吗