有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将Map<Key1Type,Val1Type>转换为Map<Key1Type,Val2Type>

要按照下面的方法签名进行转换

Map<A, Set<B>> convert(Map<A, List<B>> original){
   original.entrySet().stream().map(entry -> {
            return new SimpleImmutableEntry(entry.getKey(), new HashSet<>(entry.getValue()));
        }).collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
}

我不知道为什么。am所做的只是将条目转换为Map.Entry<String, Set<String>>的中间条目,而不是收集


共 (2) 个答案

  1. # 1 楼答案

    更简单的定义跳过了中间map步骤,因为您可以将Map.Entry<A, List<B>>内的每个Map.Entry<A, Set<B>>转换为collect步骤:

    Map<A, Set<B>> convert(Map<A, List<B>> original){
        return original.entrySet().stream()
             .collect(Collectors.toMap(Map.Entry::getKey, e -> new HashSet<>(e.getValue())));
    }
    

    您可以在方法convert前面加上static <A,B>,以确保它适用于任何类型AB

    static <A,B> Map<A, Set<B>> convert(Map<A, List<B>> original){
        ...
    }
    
  2. # 2 楼答案

    package com.student;
    
    import java.util.*;
    import java.util.stream.Collectors;
    
    public class MapConversion {
    
        static Map < String, Set < String >> convert(Map < String, List < String >> map1) {
    
            return map1.entrySet().stream()
                .collect(Collectors.toMap(Map.Entry::getKey, e - > new HashSet(e.getValue())));
        }
    
        public static void main(String[] args) {
            List < String > list1 = Arrays.asList(new String[] {
                "a",
                "b"
            });
            Map < String, List < String >> map1 = new HashMap < > () {
                {
                    put("strin1", Arrays.asList(new String[] {
                        "a",
                        "a"
                    }));
                    put("strin2", Arrays.asList(new String[] {
                        "d",
                        "d"
                    }));
                    put("strin3", Arrays.asList(new String[] {
                        "e",
                        "f"
                    }));
                }
            };
    
            System.out.println(convert(map1));
    
        }
    }