什么是惯用的 "functional" 方式来获取 Optional<String> 和 return 如果为 null 或空则为默认字符串,否则为修改后的字符串?
What is the idiomatic "functional" way to take an Optional<String> and return a default string if null or empty, a modified string otherwise?
什么是惯用的、最小的(也许是功能性的?)方式来采用 Optional<String>
并说,
- return 默认字符串,例如
true
如果为空或为空,或者
- return 修改后的字符串,例如
query_str = <str>
否则。
当然还有我笨拙的尝试:
Optional<String> queryMaybe; // Given.
String clause = "true";
if (queryMaybe.isPresent() && !queryMaybe.get().isEmpty()) {
clause = "query_str = " + queryMaybe.get();
}
但是我的同事编写的周边代码似乎使用了很多我认为可能称为 "functional" 风格的链接。例如,
String externalTraffickedStateClauses = StringUtils.defaultIfBlank(
externalTraffickedStateQueries.stream().collect(Collectors.joining(" OR ")), "false");
和
SORTORDERBY orderBy = orderByMaybe.orElse(DEFAULT_ORDER_BY);
所以,我尽可能地符合他们的风格,即链stream
,filter
,orElse
, 等等。不知道是因为我是 C++ 出身,还是因为我的知识已经过时了,但这对我来说还是很陌生。
这是否符合您的要求?
return queryMaybe
.filter(query -> !query.isEmpty())
.map(query -> "query_str = " + query)
.orElse("true")
什么是惯用的、最小的(也许是功能性的?)方式来采用 Optional<String>
并说,
- return 默认字符串,例如
true
如果为空或为空,或者 - return 修改后的字符串,例如
query_str = <str>
否则。
当然还有我笨拙的尝试:
Optional<String> queryMaybe; // Given.
String clause = "true";
if (queryMaybe.isPresent() && !queryMaybe.get().isEmpty()) {
clause = "query_str = " + queryMaybe.get();
}
但是我的同事编写的周边代码似乎使用了很多我认为可能称为 "functional" 风格的链接。例如,
String externalTraffickedStateClauses = StringUtils.defaultIfBlank(
externalTraffickedStateQueries.stream().collect(Collectors.joining(" OR ")), "false");
和
SORTORDERBY orderBy = orderByMaybe.orElse(DEFAULT_ORDER_BY);
所以,我尽可能地符合他们的风格,即链stream
,filter
,orElse
, 等等。不知道是因为我是 C++ 出身,还是因为我的知识已经过时了,但这对我来说还是很陌生。
这是否符合您的要求?
return queryMaybe
.filter(query -> !query.isEmpty())
.map(query -> "query_str = " + query)
.orElse("true")