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

tag5nh1u  于 6个月前  发布在  Java
关注(0)|答案(4)|浏览(96)

我得到

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,而不是其他。


的数据

rryofs0p

rryofs0p1#

这是ecj(eclipse编译器)中的一个bug,您可以绕过它并添加更多的类型信息:

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())));

11dmarpk

11dmarpk2#

在我的例子中,添加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);   
    }

字符串

3npbholx

3npbholx3#

您的代码未完成,并且缺少)
试着做:

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]}

4nkexdtk

4nkexdtk4#

在我的例子中,代码与Java版本相关。我在IntelliJ上本地运行并使用Jenkins部署时也会遇到同样的错误。
我不得不将其添加到我的pom.xml文件中来解决这个问题

<properties>
        <java.version>11</java.version>

字符串

相关问题