3

我有一张地图 - 地图> - 集合。

我需要过滤地图并获取对内部地图的给定键具有给定值的外部地图。

我尝试了一些组合,但它不起作用。

我如何做到这一点。

这是我尝试过的

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))));

基本上,我希望 filtersMapForKey一个条目,其内部映射(条目的值)包含一个值为channelId的键

我如何做到这一点。上面的代码使用相同的键返回整个原始映射,但内部映射为空,有效映射除外。对于有效的map,不返回完整的inner map,只返回key和value匹配channel id的map

谢谢

4

1 回答 1

1

这里似乎有两点需要纠正:

  1. 过滤器逻辑用于过滤条目而不是过滤掉它们。

  2. 仅过滤内部映射满足所述条件的那些外部条目。

您可以通过以下方式实现:

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));

这会过滤所有外部映射条目,以便它们的内部映射具有与给定值相等(ignoreCase)的值channelId,然后将这些条目收集到与Map输入类似的值中。

于 2019-07-15T15:13:16.587 回答