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

新手上路,请多包涵

我正进入(状态

   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 而不是其他。讨厌的错误仍然困扰着我。

错误仍然存在

原文由 Chaitanya Uttarwar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

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

原文由 Eugene 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 z atef 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏