为什么 Arrays.sort(stringArray, String::compareToIgnoreCase) 使用 compareToIgnoreCase() 而不是 Comparator
How come Arrays.sort(stringArray, String::compareToIgnoreCase) is using compareToIgnoreCase() instead of Comparator
需要澄清 Arrays.sort(stringArray, String::compareToIgnoreCase) 如何使用
compareTo() 其 return 类型是 String 而不是需要两个参数的 Comparator .
public static void main(String[] args) {
String[] stringArray = { "Steve", "Rick", "Aditya", "Negan", "Lucy", "Sansa", "Jon" };
Arrays.sort(stringArray, String::compareToIgnoreCase);
for (String str : stringArray) {
System.out.println(str);
}
}
A Comparator<String>
是一个函数式接口,它接受两个 String
参数和 returns 一个 int
。如果需要这样的比较器,可以使用具有相同特性的 lambda 代替。
与compareToIgnoreCase
方法有相同的特点,第一个参数是调用方法的对象,第二个参数是方法的参数。方法 return 是一个 int
(不是 String
)。所以它的形式是 Comparator<String>
.
由于所有这些以及功能接口的工作方式,可以通过利用 compareToIgnoreCase
的 lambda 表达式向 Arrays.sort
提供 Comparator<String>
对象,如下所示:
Arrays.sort(stringArray, (s1, s2) -> s1.compareToIgnoreCase(s2));
Java 编译器提供了一种 shorthand 方法来使用所谓的 Method Reference 构造这种形式的 lambda。当通过 String::compareTo
形式传入对 compareTo
方法的引用时,编译器将构造相同的 lambda(以及 Comparator<String>
对象)。编译器将意识到它可以在 lambda/Comparator 的第一个参数(称为“接收器”)上调用提供的方法,并将 lambda/Comparator 的第二个参数作为该方法采用的单个参数传递.该方法将 return 一个 int
,这是任何 Comparator
应该 return 的结果。所以你可以这样做:
Arrays.sort(stringArray, String::compareToIgnoreCase);
魔法!
需要澄清 Arrays.sort(stringArray, String::compareToIgnoreCase) 如何使用
compareTo() 其 return 类型是 String 而不是需要两个参数的 Comparator .
public static void main(String[] args) {
String[] stringArray = { "Steve", "Rick", "Aditya", "Negan", "Lucy", "Sansa", "Jon" };
Arrays.sort(stringArray, String::compareToIgnoreCase);
for (String str : stringArray) {
System.out.println(str);
}
}
A Comparator<String>
是一个函数式接口,它接受两个 String
参数和 returns 一个 int
。如果需要这样的比较器,可以使用具有相同特性的 lambda 代替。
与compareToIgnoreCase
方法有相同的特点,第一个参数是调用方法的对象,第二个参数是方法的参数。方法 return 是一个 int
(不是 String
)。所以它的形式是 Comparator<String>
.
由于所有这些以及功能接口的工作方式,可以通过利用 compareToIgnoreCase
的 lambda 表达式向 Arrays.sort
提供 Comparator<String>
对象,如下所示:
Arrays.sort(stringArray, (s1, s2) -> s1.compareToIgnoreCase(s2));
Java 编译器提供了一种 shorthand 方法来使用所谓的 Method Reference 构造这种形式的 lambda。当通过 String::compareTo
形式传入对 compareTo
方法的引用时,编译器将构造相同的 lambda(以及 Comparator<String>
对象)。编译器将意识到它可以在 lambda/Comparator 的第一个参数(称为“接收器”)上调用提供的方法,并将 lambda/Comparator 的第二个参数作为该方法采用的单个参数传递.该方法将 return 一个 int
,这是任何 Comparator
应该 return 的结果。所以你可以这样做:
Arrays.sort(stringArray, String::compareToIgnoreCase);
魔法!