Optional.ofNullable(map.get("xxx")).orElse("").toString();有更简洁 Map 取值 toString 方法吗

2020-05-26 12:00:50 +08:00
 sandman511
4195 次点击
所在节点    Java
11 条回复
watermelon11
2020-05-26 12:03:09 +08:00
getOrDefault
wangyanrui
2020-05-26 12:03:22 +08:00
map.getOrDefault 不行吗😂
ChanKc
2020-05-26 12:34:47 +08:00
get or default 要求 map 的 value 类型都是 string,有一点不合楼主要求?
handong970123
2020-05-26 16:52:49 +08:00
@ChanKc 还在这限制?我怎么不知道
KentY
2020-05-26 18:02:44 +08:00
@wangyanrui @watermelon11
getOrDefault() is not exactly the same as he wanted.
getOrDefault 是说, 如果 key 不在, 给 default.
而 OP 的问题, 有可能 key"XXX"存在, 值是 null
aguesuka
2020-05-26 18:09:09 +08:00
如果 map 的 VALUE 是 String 类型,则不要 toString,否则 orElse("") 不会通过编译。
Optional.ofNullable(map.get("xxx")).map(Object::toString).orElse(""); 如果要用 Optional 是这样;
如果是我就自己封一个方法 toStringOrEmpty(String stringOrNull)
ChanKc
2020-05-26 18:19:37 +08:00
@handong970123 我表述有点问题…试想一个 Map<String, Person>,get Or default 的那个 default 应该只能是 Person 而不是 String,如果要拿 String 那么泛型的 value 类型应该也要 String 。不用泛型当我没说
lxk11153
2020-05-26 18:31:33 +08:00
java.util.Objects#toString(Object, String)
keshawnvan
2020-05-26 21:57:02 +08:00
Optional.ofNullable(map.get("xxx")).map(Object::toString).orElse("");
KentY
2020-05-26 22:01:25 +08:00
思考这个问题会感受到 kotlin 比 java 的简洁明了.
Mistwave
2020-05-26 22:22:35 +08:00
来写 Scala 吧:

map.getOrElse("xxx", "").toString



map.get("xxx") match {
case Some(x) => x.toString
case None => ""
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/675550

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX