检查对象的结果是否为空的简短版本,然后转换为布尔值并在 Java 中设置



我一直在Java中寻找以下语句的简短版本:

if(headers.get(BinderHeaders.NATIVE_HEADERS_PRESENT) !=null ) {
record
.setNativeHeadersPresent((boolean) headers.get(BinderHeaders.NATIVE_HEADERS_PRESENT));
}

如果我想使用Optional.ofNullable它不起作用,因为我也需要将对象转换为布尔值。

PS:我正在使用Java8。

这不是Optional.ofNullable的目的,但我会分享如何做到这一点,因为我喜欢方法引用。

Optional.ofNullable(headers.get(BinderHeaders.NATIVE_HEADERS_PRESENT))
.map(boolean.class::cast)
.ifPresent(record::setNativeHeadersPresent);

既然你有一个Map<String, String>Map#getOrDefault可能是一个选择。

record.setNativeHeadersPresent(
Boolean.parseBoolean(
headers.getOrDefault(BinderHeaders.NATIVE_HEADERS_PRESENT, "false")
)
);

您似乎正在尝试实现此映射

Input  ->  Output
-----      ------
true       true
false      false
null       false

如果你必须使用Optional,最简洁的表达方式是

Optional.ofNullable(headers.get(BinderHeaders.NATIVE_HEADERS_PRESENT)).orElse(false);

但是,您根本不需要Optional。 以下内容将满足您的要求:

Boolean nhp = headers.get(BinderHeaders.NATIVE_HEADERS_PRESENT);
record.setNativeHeadersPresent((nhp == null) ? false : nhp);

如果您希望它在一个语句中(以调用headers.get()两次为代价(:

record.setNativeHeadersPresent(
(headers.get(BinderHeaders.NATIVE_HEADERS_PRESENT) == null) 
? false 
: headers.get(BinderHeaders.NATIVE_HEADERS_PRESENT));

重要提示:使用Map#getOrDefault(...,false)可能不起作用。 如果Map实现支持null值,则getOrDefault()null值与该键相关联时仍可返回null。 (即在某个时候put(key,value)value==null被执行(。仅当映射中不存在键时,才会返回default值。

如果我理解正确,对ifPresent的简单调用应该有效:

Optional.ofNullable(headers.get(BinderHeaders.NATIVE_HEADERS_PRESENT))
.ifPresent(
x -> record.setNativeHeadersPresent((boolean)x)
)

你对可选做什么(无论你是否强制转换它(并不重要,因为ifPresent接受一个"函数"作为它的参数。您可以传入执行任何您喜欢的操作的代码。

相关内容

  • 没有找到相关文章

最新更新