是否可以使用 Stream 将对象收集到哈希图中,而不是强制转换?
Is it possible to use a Stream to collect an Object into a hashmap, rather than casting?
我有一张 myMap
类型 <String, Object>
的地图,它看起来像:
(
"header", "a string value"
"mapObject", {object which is always of type map<String, String>}
)
我基本上是想把“mapObject”的值拉出来变成一个Map<String, String>
最初我只是像这样将它转换为 ImmutableMap:
(ImmutableMap<String, String>) myMap.get("mapObject");
但我想知道是否有一种方法可以通过使用 Stream 来做到这一点。
我目前有:
myMap.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> (String) entry.getValue()));
但我遇到以下异常:
class com.google.common.collect.RegularImmutableMap cannot be cast to class java.lang.String
有没有办法做到这一点,还是我最好坚持使用演员表?
可能的解决方案如下所示:
Optional<Map<String, String>> result = myMap.entrySet()
.stream()
.filter(entry -> "mapObject".equals(entry.getKey()))
.map(entry -> (Map<String, String>) entry.getValue())
.findFirst();
您的错误消息来自将第二个条目集(Map 类型)强制转换为此处的字符串:entry -> (String) entry.getValue()
更新:
正如 Holger 所说,最好的解决方案仍然是 myMap.get("mapObject")
。上面的解决方案只是为了展示如何使用 Streams API.
解决问题
我有一张 myMap
类型 <String, Object>
的地图,它看起来像:
(
"header", "a string value"
"mapObject", {object which is always of type map<String, String>}
)
我基本上是想把“mapObject”的值拉出来变成一个Map<String, String>
最初我只是像这样将它转换为 ImmutableMap:
(ImmutableMap<String, String>) myMap.get("mapObject");
但我想知道是否有一种方法可以通过使用 Stream 来做到这一点。
我目前有:
myMap.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> (String) entry.getValue()));
但我遇到以下异常:
class com.google.common.collect.RegularImmutableMap cannot be cast to class java.lang.String
有没有办法做到这一点,还是我最好坚持使用演员表?
可能的解决方案如下所示:
Optional<Map<String, String>> result = myMap.entrySet()
.stream()
.filter(entry -> "mapObject".equals(entry.getKey()))
.map(entry -> (Map<String, String>) entry.getValue())
.findFirst();
您的错误消息来自将第二个条目集(Map 类型)强制转换为此处的字符串:entry -> (String) entry.getValue()
更新:
正如 Holger 所说,最好的解决方案仍然是 myMap.get("mapObject")
。上面的解决方案只是为了展示如何使用 Streams API.