在《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)的
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表达式是如何工作的。尽力做到这一点
用的其实就是两个参数的方法public static <T> void sort(T[] a, Comparator<? super T> c)
public class Demo2 {
public static void main(String[] args) {
User user1 = new User(1,"A");
User user2 = new User(2,"B");
User user3 = new User(3, "C");
User[] users = new User[3];
users[0] = user1;
users[1] = user2;
users[2] = user3;
//里面用了Comparator 传入的是lambda表达式 这里 根据id排序 当结果<0 升序 否则降序
Arrays.sort(users, (u1, u2) -> u2.getId() - u1.getId());
//打印
Arrays.stream(users).forEach(System.out::println);
//结果
// User(id=3, name=C)
// User(id=2, name=B)
// User(id=1, name=A)
}
}
@Data
@AllArgsConstructor
class User {
private Integer id;
private String name;
}