检查对象的结果是否不为 null 然后转换为布尔值并设置为 Java 的简短版本
Short version of check if the result of an object in not null then cast to boolean and set in Java
我一直在 Java 中寻找以下语句的简短版本:
if(headers.get(BinderHeaders.NATIVE_HEADERS_PRESENT) !=null ) {
record
.setNativeHeadersPresent((boolean) headers.get(BinderHeaders.NATIVE_HEADERS_PRESENT));
}
如果我想使用 Optional.ofNullable
它不起作用,因为我也需要将对象转换为布尔值。
P.S:我正在使用 Java8.
It's not what Optional.ofNullable
for,但我会分享它是如何完成的,因为我喜欢方法引用。
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")
)
);
如果我理解正确,对 ifPresent
的简单调用应该有效:
Optional.ofNullable(headers.get(BinderHeaders.NATIVE_HEADERS_PRESENT))
.ifPresent(
x -> record.setNativeHeadersPresent((boolean)x)
)
使用可选参数做什么并不重要(无论是否强制转换),因为 ifPresent
接受 "function" 作为其参数。您可以传入任何您喜欢的代码。
您似乎正在尝试实现此映射
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()
仍然可以 return null
如果 null
值与该键关联。 (即在某些时候 put(key,value)
和 value==null
被执行)。 default
值仅在映射中不存在键时才 returned。
我一直在 Java 中寻找以下语句的简短版本:
if(headers.get(BinderHeaders.NATIVE_HEADERS_PRESENT) !=null ) {
record
.setNativeHeadersPresent((boolean) headers.get(BinderHeaders.NATIVE_HEADERS_PRESENT));
}
如果我想使用 Optional.ofNullable
它不起作用,因为我也需要将对象转换为布尔值。
P.S:我正在使用 Java8.
It's not what Optional.ofNullable
for,但我会分享它是如何完成的,因为我喜欢方法引用。
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")
)
);
如果我理解正确,对 ifPresent
的简单调用应该有效:
Optional.ofNullable(headers.get(BinderHeaders.NATIVE_HEADERS_PRESENT))
.ifPresent(
x -> record.setNativeHeadersPresent((boolean)x)
)
使用可选参数做什么并不重要(无论是否强制转换),因为 ifPresent
接受 "function" 作为其参数。您可以传入任何您喜欢的代码。
您似乎正在尝试实现此映射
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()
仍然可以 return null
如果 null
值与该键关联。 (即在某些时候 put(key,value)
和 value==null
被执行)。 default
值仅在映射中不存在键时才 returned。