有人可以帮助我理解如下:
// This works fine
List list= Arrays.asList("a","b","A","B");
str.sort(String::compareToIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
我可以将上述方法引用分配给任何变量吗?
??? holder = String :: compareToIgnoreCase;
但是我可以分配对象引用而不会出现任何问题:
String aa = "aa";
Function compareFunction = aa::compareToIgnoreCase;
Run Code Online (Sandbox Code Playgroud)
在此先感谢,阿卜杜勒
String::compareToIgnoreCase 等于匿名类:
new Comparator<String>() {
@Override
public int compare(String s, String str) {
return s.compareToIgnoreCase(str);
}
};
Run Code Online (Sandbox Code Playgroud)
因此可以将其分配给变量类型Comparator<String>:
Comparator<String> compareToIgnoreCase = String::compareToIgnoreCase;
Run Code Online (Sandbox Code Playgroud)
同时表达式aa::compareToIgnoreCase;表示带有aa返回Integer的字符串参数的函数.
new Function<String, Integer>() {
@Override
public Integer apply(String str) {
return aa.compareToIgnoreCase(str);
}
};
Run Code Online (Sandbox Code Playgroud)
要么:
Function<String, Integer> fun = aa::compareToIgnoreCase;
Run Code Online (Sandbox Code Playgroud)
String::compareToIgnoreCase;和之间的区别在于aa::compareToIgnoreCase;,在第一种情况下,我们需要2个参数:compareToIgnoreCase将调用哪个方法的字符串,以及将在此方法中传递的字符串.它完美匹配的签名int compare(T o1, T o2);.
在第二种情况下,你可以有一个参数(aa).所以你只需要一个,这将被传递compareToIgnoreCase.它完全匹配R apply(T t);
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |