是否可以使用 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.

解决问题