我正在获取列表(如果该列表已经存在)并向其中添加元素。
代码段:
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
错误详细信息:
错误:不兼容的类型:布尔值无法转换为列表
如何解决此问题?
答案 0 :(得分:1)
因为add()具有boolean
作为返回类型。您不能将布尔值放在以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)));
答案 1 :(得分:0)
即使重新使用以前的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);