在 java 中更改嵌套映射中的内部值类型的最简单方法是什么?
What is the easiest way to change the inner value type in a nested map in 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())))));
我有一个嵌套映射 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())))));