Map<String, Map<String, String>> - 使用 Stream 选择值的键

我有这张地图:

Map<String, Map<String, String>> listMap = new HashMap<>();

我想选择所有KeysMapmain 中的值不同的内容MaplistMap.value.key

List<String> distinct = listMap.entrySet().stream()
                                .map(e -> e.getValue()) //Map<String, String>
                                //Select key of value
                                .distinct().collect(Collectors.toList());

我不知道如何选择keyof valueof listMap


凤凰求蛊
浏览 93回答 2
2回答

繁星淼淼

您需要flatMap将所有 inner 的所有键映射Map到一个Stream:List<String>&nbsp;distinct&nbsp;=&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;listMap.values()&nbsp;//&nbsp;Collection<Map<String,String>> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.stream()&nbsp;//&nbsp;Stream<Map<String,String>> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flatMap(map&nbsp;->&nbsp;map.keySet().stream())&nbsp;//&nbsp;Stream<String> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.distinct()&nbsp;//&nbsp;Stream<String> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toList());&nbsp;//&nbsp;List<String>

潇湘沐

收集这些的另一种方法可以是Set:Set<String> distinct = new LinkedHashSet<>(); // for a predictable orderlistMap.values().forEach(e -> distinct.addAll(e.keySet()));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java