在java中,更改嵌套映射中的内部值类型的最简单方法是什么



我有一个嵌套映射Map<String, Map<String, List<ObjectA>>>传递给我,我想将其更改为类型Map<String, Map<String, Set<ObjectA>>>,在Java中使用流最简单的方法是什么?我试过使用Collectors.groupingBy,但无法正常工作。

最好的方法是迭代外部映射和内部映射中的每个条目,然后将内部映射条目值List<ObjectA>转换为Set<ObjectA>

Map<String, Map<String, Set<ObjectA>>> resultMap = map.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, val -> new HashSet<>(val.getValue())))));

注意:如果您将List转换为HashSet,则不会维护相同的订单,因此您可以选择LinkedHashSet而不是HashSet来维护订单

Map<String, Map<String, Set<ObjectA>>> resultMap = map.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, val -> new LinkedHashSet<>(val.getValue())))));

最新更新