当我将ArrayList传递给TreeSet构造函数时,我收到以下错误:
library(dplyr)
library(tidyr)
dat %>%
mutate(x = factor(x, levels = unique(z))) %>%
count(x, y) %>%
na.omit %>%
spread(y, n, fill = 0, drop = FALSE) %>%
select(-x)
# A tibble: 5 x 3
# `21` `22` `23`
#* <dbl> <dbl> <dbl>
#1 2.00 0 1.00
#2 0 1.00 0
#3 0 0 0
#4 1.00 0 0
#5 0 0 0
我在这一行得到了上述错误:
Exception in thread "main" java.lang.ClassCastException: [I cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1294)
at java.util.TreeMap.put(TreeMap.java:538)
at java.util.TreeSet.add(TreeSet.java:255)
at java.util.AbstractCollection.addAll(AbstractCollection.java:344)
at java.util.TreeSet.addAll(TreeSet.java:312)
at java.util.TreeSet.<init>(TreeSet.java:160)
at jay.week1.MaxPairwiseProduct.getMaxPairwiseProduct(MaxPairwiseProduct.java:8)
at jay.week1.MaxPairwiseProduct.main(MaxPairwiseProduct.java:17)
这是完整的程序:
TreeSet<Integer> set = new TreeSet(Arrays.asList(numbers));
我做错了什么?
答案 0 :(得分:1)
没有这样做是因为你不能拥有try (Resources resources = new Resources()) {
....
} catch (Exception e) {
....
}
,只有TreeSet<int>
。
由于您没有为TreeSet<Integer>
指定通用类型,TreeSet
会尝试创建Arrays.asList
,但它会成功。为何选择List<int[]>
?你可能会问。这是因为int[]
不能是泛型类型,因此int
的泛型参数推断为asList
,它可以是泛型类型。但是,此列表会进入int[]
的构造函数,TreeSet
会发现这不是TreeSet
的列表,会抛出异常。
要解决此问题,您可以将参数类型从Integer
更改为int[]
,或将Integer[]
转换为int[]
,然后再将其传递到Integer[]
Arrays.asList
答案 1 :(得分:1)
实际返回的Arrays.asList()是int数组的列表。
List<int[]> list = Arrays.asList(numbers);
您需要执行以下操作。
TreeSet<Integer> set = Arrays.stream(number).boxed()
.collect(Collectors.toCollection(TreeSet::new));