有谁能帮我理解以下几点吗?
// This works fine
List list= Arrays.asList("a","b","A","B");
str.sort(String::compareToIgnoreCase); 是否可以将上述方法引用赋值给任何变量?
?holder = String::compareToIgnoreCase;
但是,我可以分配对象引用,而不会出现以下任何问题:
String aa = "aa";
Function compareFunction = aa::compareToIgnoreCase;提前谢谢你,阿卜杜勒
发布于 2019-02-23 18:25:15
String::compareToIgnoreCase等于匿名类:
new Comparator<String>() {
@Override
public int compare(String s, String str) {
return s.compareToIgnoreCase(str);
}
};因此,可以将其赋值给具有Comparator<String>类型的变量:
Comparator<String> compareToIgnoreCase = String::compareToIgnoreCase;同时,表达式aa::compareToIgnoreCase;意味着返回整数的字符串参数aa的函数。
new Function<String, Integer>() {
@Override
public Integer apply(String str) {
return aa.compareToIgnoreCase(str);
}
};或者:
Function<String, Integer> fun = aa::compareToIgnoreCase;String::compareToIgnoreCase;和aa::compareToIgnoreCase;的区别在于,在第一种情况下,我们需要两个参数:调用方法compareToIgnoreCase的字符串和将在该方法中传递的字符串。它与int compare(T o1, T o2);的签名完全匹配。
在第二种情况下,您几乎有一个参数(aa)。因此,您只需要一个,它将被传递到compareToIgnoreCase。它与R apply(T t);完全匹配
发布于 2019-02-24 13:09:55
public class Test {
public static void main(String args[]) {
String str1 = "Strings are immutable";
String str2 = "Strings are immutable";
String str3 = "Integers are not immutable";
int result = str1.compareToIgnoreCase( str2 );
System.out.println(result);
result = str2.compareToIgnoreCase( str3 );
System.out.println(result);
result = str3.compareToIgnoreCase( str1 );
System.out.println(result);}}
https://stackoverflow.com/questions/54844668
复制相似问题