微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Arrays.sortind,l,r-> nums [l]-nums [r];

如何解决Arrays.sortind,l,r-> nums [l]-nums [r];

任何人都可以向我解释这段代码的工作原理。

 Arrays.sort(ind,(l,r) -> nums[l] - nums[r]);
nums = [3,2,4]

ind = [0,1,2]

我调试了它,并注意到了

l = 1
r = 0

then 

l = 2
r = 1

then 

l = 2
r = 0

我得到

ind = [1,2]

我很困惑。谁能解释一下它是如何工作的。

解决方法

ind是一个索引值数组,初始索引值从0到len-1。

sort()的调用将根据给定索引处num中的值对索引值进行排序。

结果是,如果您为num[i]中的值打印ind,则按照排序后出现的顺序打印,这些值将按排序顺序(升序)。

for (int j = 0; j < ind.length; j++) {
    int i = ind[j];
    int num = nums[i];
    System.out.println(num);
}
// Short version
for (int i : ind)
    System.out.println(nums[i]);

输出

2
3
4
,

此代码使用Arrays.sort(T[] a,Comparator<? super T> c)

此函数接受参数:

  • 您要排序的Array
  • 一个Comparator

Comparator是仅具有一种方法的接口:public int compare(Object obj1,Object obj2)。如果x < 0分别是0x > 0obj1 lower than,则此方法返回equalgreater thanobj2

因此,由于Comparator有一种独特的方法,您可以使用lambda,因此可以在这里进行操作:(l,r) -> nums[l] - nums[r]

这是“我正在创建一个新的Comparator,这是其独特方法所能做的事情”的简短版本:

  • (l,r):它需要l和r作为参数
  • nums[l] - nums[r]返回该表达式的结果。

如您所见:

  • 如果nums[l]> nums[r]是肯定的结果
  • 如果nums[l] = nums[r],则结果为0
  • 如果nums[l] nums[r]的结果是否定的

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。