问题遇到的现象和发生背景 :
在《Java核心技术 卷I》中有这样一段代码
问题相关代码:
var planets = new String[] {"Mei","Ve","Earth"};
System.out.println(Arrays.toString(planets));
Arrays.sort(planets);
System.out.println(Arrays.toString(planets));
System.out.println("Length:");
Arrays.sort(planets,(first,second) -> first.length() - second.length());
System.out.println(Arrays.toString(planets));
在里面有这样一段Lambda表达式:
(first,second) -> first.length() - second.length()
以及它所在的语句:
Arrays.sort(planets,(first,second) -> first.length() - second.length());
这里我不理解的是,为什么我在Java的API网站上没有寻找到sort方法的格式是(参数1,参数2)的
Java API的sort方法:
编辑器(IDEA)的运行结果:
我想要知道的
1.为什么Java API网站上没有关于sort方法的双参数方法?API上的sort方法都只有1个参数或3个参数。而在源代码中存在2个参数。分别是数组planets和Lambda表达式。那么,是不是我理解错了,或许Lambda表达式根本不是一个参数?如果不是,那它在这里的作用是什么?怎么运行的?
2.为什么要向sort方法传入一个Lambda表达式?这里这个Lambda表达式起到了什么作用?为什么最后传入Lambda表达式后排序后的数组由[Earth, Mei, Ve]变成了[Ve, Mei, Earth]?这里的原理是什么?它是如何工作的?
我希望各位回答者:
1.尽量回答全,保证答案中含有上面2个问题的答案
2.能够以通俗的语言(好理解)解释Lambda表达式是如何工作的。尽力做到这一点