我一直在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
接受一个"函数"作为它的参数。您可以传入执行任何您喜欢的操作的代码。