代码之家  ›  专栏  ›  技术社区  ›  Chaitanya Uttarwar

无法推断hashmap的类型参数<>

  •  5
  • Chaitanya Uttarwar  · 技术社区  · 7 年前

       Cannot infer type arguments for java.util.HashMap<>
    

    对于以下代码

    class Test {
    
        public static void main(String[] args) {
    
            Map<Integer, String> map = new HashMap<>();
            map.put(1, "x");
            map.put(2, "y");
            map.put(3, "x");
            map.put(4, "z");
    
      //the following line has error
            Map<String, ArrayList<Integer>> reverseMap = new java.util.HashMap<>(map.entrySet().stream()
                    .collect(Collectors.groupingBy(Map.Entry::getValue)).values().stream()
                    .collect(Collectors.toMap(item -> item.get(0).getValue(),
                            item -> new ArrayList<>(item.stream().map(Map.Entry::getKey).collect(Collectors.toList())))); 
            System.out.println(reverseMap);
    
        }
    
    }
    

    出了什么问题,有人能解释一下吗? 我已经检查了正确的导入,发现我正在导入java。util。hashmap等。 这个讨厌的错误仍然困扰着我。

    The Error Persists

    3 回复  |  直到 7 年前
        1
  •  10
  •   Eugene    7 年前

    这是一个错误 ecj (eclipse编译器),您可以解决此问题并添加更多类型信息:

    item -> new ArrayList<Integer>(item.stream().map(Entry::getKey)
    

    看看我是怎么添加的 ArrayList<Integer> .

    它可以很好地编译 javac-8 and 9 .

    顺便说一句,似乎有一种更简单的方式来做事情:

    map.entrySet()
                .stream()
                .collect(Collectors.groupingBy(
                        Entry::getValue,
                        HashMap::new,
                        Collectors.mapping(Entry::getKey, Collectors.toList())));
    
        2
  •  4
  •   z atef    6 年前

    在我的例子中,添加后错误消失了 import java.util.Map; :

    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    
        public void saveFooOrder(Foo foo, long orderId) {
    
             Map<String, Object> values = new HashMap<>();
                                             /*^^^^ Error was here: Cannot 
                                                    infer type arguments for HashMap<>*/
                values.put("fooOrder", orderId);
                values.put("foo", foo.getId());
                orderFooInserter.execute(values);   
        }
    
        3
  •  0
  •   ΦXocę 웃 Пepeúpa ツ    7 年前

    您的代码未完成,并且缺少一个 )

    试着做:

    import java.util.*;
    import java.util.stream.Collectors;
    public class HelloWorld{
    
         public static void main(String []args){
            Map<Integer, String> map = new HashMap<>();
            map.put(1, "x");
            map.put(2, "y");
            map.put(3, "x");
            map.put(4, "z");
    
            Map<String, ArrayList<Integer>> reverseMap = new java.util.HashMap<>(map.entrySet().stream()
                    .collect(Collectors.groupingBy(Map.Entry::getValue)).values().stream()
                    .collect(Collectors.toMap(item -> item.get(0).getValue(),
                            item -> new ArrayList<>(item.stream().map(Map.Entry::getKey).collect(Collectors.toList())))));
            System.out.println(reverseMap);
         }
    }
    

    这会产生输出

    {x=[1, 3], y=[2], z=[4]}