为什么我的 lambda 不适用于比较器?
Why my lambda is not applicable for comparator?
起初,我写了下面的代码,但是无法构建。
Arrays.sort(n, (o1 ,o2) -> o1 % 2 == 0 ? 1 : -1);
enter image description here
然后,我写了另一个代码来测试它。
Arrays.sort(n,(o1, o2) -> o1 - o2);
但它在 vs 代码中有相同的错误消息。
然后,我在IDEA中尝试了这些代码,它在下图中有不同的错误信息enter image description here
它说运算符'-'不能应用于'T','T。
然后,我重写代码:Arrays.sort(n,(int o1, int o2) -> o1 - o2);
enter image description here
我不知道为什么我的代码不起作用。我找到了我昨天写的代码:
Arrays.sort(envelopes,(int []o1,int []o2) -> o1[0] == o2[0] ? o2[1] - o1[1] :o1[0] - o2[0]);
效果很好。
您遇到了 Java 类型系统的缺陷之一,它使本来可以很好地向后兼容的 lambda 变得笨拙 — int
是原始类型。
(还)没有针对基本类型的泛型,所以没有 Comparator<int>
。您尝试使用的排序方法的签名是
public static <T> void sort(T[] a, Comparator<? super T> c)
和T
不能是int
(或short
、byte
等)。
解决此问题的一种方法是将您的 int
框起来,例如有一个流:
Arrays.stream(n).boxed().sorted((i1, i2) -> i1 % 2 == 0 ? 1 : -1)
方法签名 sort
具有泛型类型 T
:
public static <T> void sort(T[] a, Comparator<? super T> c);
因此,为了获得您想要的行为,您必须将 n
定义为 Integer
.
的数组
这可以正常工作:
Integer[] n = new Integer[] {1, 2, 3, 4};
Arrays.sort(n, (o1 ,o2) -> o1 % 2 == 0 ? 1 : -1);
关于泛型和原始类型的 Whosebug 问题:
Why don't Java Generics support primitive types?
起初,我写了下面的代码,但是无法构建。
Arrays.sort(n, (o1 ,o2) -> o1 % 2 == 0 ? 1 : -1);
enter image description here
然后,我写了另一个代码来测试它。
Arrays.sort(n,(o1, o2) -> o1 - o2);
但它在 vs 代码中有相同的错误消息。
然后,我在IDEA中尝试了这些代码,它在下图中有不同的错误信息enter image description here
它说运算符'-'不能应用于'T','T。
然后,我重写代码:Arrays.sort(n,(int o1, int o2) -> o1 - o2);
enter image description here
我不知道为什么我的代码不起作用。我找到了我昨天写的代码:
Arrays.sort(envelopes,(int []o1,int []o2) -> o1[0] == o2[0] ? o2[1] - o1[1] :o1[0] - o2[0]);
效果很好。
您遇到了 Java 类型系统的缺陷之一,它使本来可以很好地向后兼容的 lambda 变得笨拙 — int
是原始类型。
(还)没有针对基本类型的泛型,所以没有 Comparator<int>
。您尝试使用的排序方法的签名是
public static <T> void sort(T[] a, Comparator<? super T> c)
和T
不能是int
(或short
、byte
等)。
解决此问题的一种方法是将您的 int
框起来,例如有一个流:
Arrays.stream(n).boxed().sorted((i1, i2) -> i1 % 2 == 0 ? 1 : -1)
方法签名 sort
具有泛型类型 T
:
public static <T> void sort(T[] a, Comparator<? super T> c);
因此,为了获得您想要的行为,您必须将 n
定义为 Integer
.
这可以正常工作:
Integer[] n = new Integer[] {1, 2, 3, 4};
Arrays.sort(n, (o1 ,o2) -> o1 % 2 == 0 ? 1 : -1);
关于泛型和原始类型的 Whosebug 问题: Why don't Java Generics support primitive types?