这一行代码中的lambda表达式我不知道其中的含义,比如first,second,以及后面减法,这三个参数为什么放在这个地方

Arrays.sort(planets,(first,second)->first.length()-second.length());

图片说明

这一行lambda表达式

Arrays.sort(         planets         ,          (first,second)->first.length()-second.length()        );

其实就等于匿名内部类的写法:

Arrays.sort(planets,
    new Comparator<String>() {
        @Override
        public int compare(String first, String second) {
            return first.length()-second.length();
        }
    }
);

Arrays.sort()方法有两个参数,第一个参数是要排序的数组,第二个参数是一个被实现了的接口,实现这个的方法写的就是你要排序的规则(按大小排,按长度排。。。)

  • 插一句:为什么要用匿名内部类或lambda表达式?因为这个接口只会被用一次,没有必要非要写个实现类

再看这个被重写的方法的参数,就是lambda表达式->前面的两个参数

@Override
public int compare(String first, String second) {
        return first.length()-second.length();
}

lambda表达式后面first.length()-second.length()); 其实就是方法体

你的这个lambda表达式是简写的,可以这样写,看得更直观:

(first, second) -> {
        return first.length() - second.length();
}

这是重写排序方法
first和second分别代表第一个参数和第二个参数,你取别的名字也行
first.length()-second.length() 是告诉Arrays 当你的数组中有多个值的时候 你是怎么比较他们的大小的
返回值为0是相等, 小于0 是 first > second, 大于0 是 first < second

(first,second)->first.length()-second.length()相当于一个匿名函数,类似

new Comparer<String>() {
@override
int compareTo(String first, String second) {
return first.length()-second.length();
}
}

这个函数是你定义但是sort函数调用的,函数的参数first second会由sort去传入