JAVA中如何对long[]数组降序排序[duplicate]

bvjxkvbb  于 2023-01-29  发布在  Java
关注(0)|答案(2)|浏览(365)
    • 此问题在此处已有答案**:

Sort large arrays of primitive types in descending order(22个答案)
Sorting int array in descending order [duplicate](4个答案)
3小时前关门了。
我正在尝试用排序int []的方法来排序long []数组,但它不起作用。

long[] nums ={2,3,4,5,23,54,1};
Arrays.sort(nums,(a,b)->{
         return b-a;
         });  
System.out.println(Arrays.toString(nums));

出现如下错误:

error: no suitable method found for sort(long[],(a,b)->{ r[...] a; })

很抱歉,如果它感觉像开始,但我卡住了。

xienkqul

xienkqul1#

Arrays类提供了两个方法,它们将long基元值数组作为第一个参数:sortsort。这两个方法都不接受Comparator,也不接受任何其他类型的lambda。
你引用的错误信息就是这么说的。
为了实现你的目标,我奇怪地发现Java中没有内置方便的方法来反转long基元数组。你要么必须使用swap elements in reverse order,要么需要将基元装箱到对象中。这两种方法都在堆栈溢出中介绍过。
或者看看第三方库,可能是 Google Guavaexample)、*Eclipse集合 * 或 *Apache共享资源 *(example)。

jogvjijk

jogvjijk2#

Basil的答案是正确的,因为Arrays上没有使用long数组和Comparator的排序方法。
如果使用Eclipse Collections,则可以将长数组 Package 在MutableLongList中,并使用支持LongComparator的原语sortThis

@Test
public void sortLongArrayDescending()
{
    long[] nums = {2L, 3L, 4L, 5L, 23L, 54L, 1L};
    MutableLongList list = LongLists.mutable.with(nums);
    list.sortThis((a, b) -> Long.compare(b, a));
    Assertions.assertArrayEquals(new long[]{54L, 23L, 5L, 4L, 3L, 2L, 1L}, nums);
    System.out.println(Arrays.toString(nums));
}

如果您不想创建MutableLongList Package 器,也可以使用LongQuickSort将长数组与LongComparator排序。

@Test
public void sortLongArrayDescending()
{
    long[] nums = {2L, 3L, 4L, 5L, 23L, 54L, 1L};
    LongQuickSort.sort(nums, 0, nums.length - 1, (a, b) -> Long.compare(b, a));
    Assertions.assertArrayEquals(new long[]{54L, 23L, 5L, 4L, 3L, 2L, 1L}, nums);
    System.out.println(Arrays.toString(nums));
}

有一个关于here库中原语排序功能的博客。
注意:我是Eclipse集合的提交者。

相关问题