我有地图-地图>-收藏。
我需要过滤地图并获取具有内部地图给定键值的外部地图。
我尝试了一些组合,但是没有用。
我如何实现这一目标。
这是我尝试过的
Map<String, Map<String, String>> originalMap = getOriginalMap();
String channelId = "channelIdVal";
Map<String, Map<String, String>> filteredMapForKey = originalMap.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,
e -> e.getValue().entrySet().stream().filter(innerMap -> innerMap.getValue().equalsIgnoreCase(channelId)).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))));
基本上,我希望 filteredMapForKey 有一个条目,其内部映射(条目的值)包含一个值为 channelId
我该如何实现。上面的代码使用相同的键返回整个原始地图,但内部的地图却是空的(有效的除外)。对于有效的地图,仅返回具有匹配通道ID的键和值的地图,而不是返回完整的内部地图
谢谢
答案 0 :(得分:1)
似乎这里有两点需要纠正:
用于过滤条目而不是过滤出条目的过滤逻辑。
仅过滤内部映射满足规定条件的外部条目。
您可以通过以下方式实现这一目标:
Map<String, Map<String, String>> filteredMapForKey = originalMap.entrySet()
.stream()
.filter(e -> e.getValue()
.values()
.stream()
.anyMatch(innerMapVal -> innerMapVal.equalsIgnoreCase(channelId)))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
这将过滤所有外部映射条目,以便它们的内部映射具有等于给定channelId
的值(ignoreCase),然后将这些条目收集到与外部Map
类似的{{1}}中输入。