将 ArrayList 作为值放入地图时出现不兼容类型错误
Incompatible types error when put ArrayList as value to a map
我正在获取列表(如果它已经存在)并向其中添加一个元素。
代码片段:
Map<Integer, List<Integer>> map = new TreeMap<>(Collections.reverseOrder());
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
int factor = 0;
int num = sc.nextInt();
for (int j = 1; j <= num; j++)
if (num % j == 0) factor++; //just getting factor count of each input
map.put(factor, map.getOrDefault(factor, new ArrayList<>()).add(num)); // error line
错误详情:
error: incompatible types: boolean cannot be converted to List
如何解决这个麻烦?
因为 add() 有 boolean
作为 return 类型。您不能将布尔值放入以 List<Integer>
作为值的地图。
您需要创建 ArrayList -> 先向其中添加一个元素。
然后才把它作为一个值放到地图上:
List<Integer> list = new ArrayList<>();
list.add(num);
map.put(factor, map.getOrDefault(factor, list));
从 Java 9+ 开始,您可以使用 List.of()
:
map.put(factor, map.getOrDefault(factor, List.of(num)));
你的错误行创建了一个新的 ArrayList<>() 即使之前的 ArrayList 被重新使用所以尝试:
List<Integer> list = map.get(factor);
if (list == null) {
list = new ArrayList<>();
map.put(factor, list);
}
list.add(num);
在 java 9 List.of(num) 是不可变的,所以 .add(num) 到现有的会失败,但在 Java 8+ 你可以使用这个更简洁的定义仅在需要时创建新的 ArrayList:
var map = new TreeMap<Integer, List<Integer>>(Collections.reverseOrder());
...
map.computeIfAbsent(factor, ArrayList::new).add(num);
我正在获取列表(如果它已经存在)并向其中添加一个元素。
代码片段:
Map<Integer, List<Integer>> map = new TreeMap<>(Collections.reverseOrder());
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
int factor = 0;
int num = sc.nextInt();
for (int j = 1; j <= num; j++)
if (num % j == 0) factor++; //just getting factor count of each input
map.put(factor, map.getOrDefault(factor, new ArrayList<>()).add(num)); // error line
错误详情:
error: incompatible types: boolean cannot be converted to List
如何解决这个麻烦?
因为 add() 有 boolean
作为 return 类型。您不能将布尔值放入以 List<Integer>
作为值的地图。
您需要创建 ArrayList -> 先向其中添加一个元素。
然后才把它作为一个值放到地图上:
List<Integer> list = new ArrayList<>();
list.add(num);
map.put(factor, map.getOrDefault(factor, list));
从 Java 9+ 开始,您可以使用 List.of()
:
map.put(factor, map.getOrDefault(factor, List.of(num)));
你的错误行创建了一个新的 ArrayList<>() 即使之前的 ArrayList 被重新使用所以尝试:
List<Integer> list = map.get(factor);
if (list == null) {
list = new ArrayList<>();
map.put(factor, list);
}
list.add(num);
在 java 9 List.of(num) 是不可变的,所以 .add(num) 到现有的会失败,但在 Java 8+ 你可以使用这个更简洁的定义仅在需要时创建新的 ArrayList:
var map = new TreeMap<Integer, List<Integer>>(Collections.reverseOrder());
...
map.computeIfAbsent(factor, ArrayList::new).add(num);