我正在
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 而不是其他。 令人讨厌的错误仍然困扰着我。
这是
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())));
就我而言,添加
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);
}
您的代码尚未完成,您缺少一个
)
尝试做:
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]}
就我而言,代码与 Java 版本相关。 我在 IntelliJ 本地运行并使用 Jenkins 部署时遇到了同样的错误。
我必须将其添加到我的 pom.xml 文件中才能解决问题
<properties>
<java.version>11</java.version>