java - Java 8 混淆 - > String::compareToIgnoreCase
问题描述
有人可以帮助我理解以下内容:
// This works fine
List list= Arrays.asList("a","b","A","B");
str.sort(String::compareToIgnoreCase);
我可以将上述方法引用分配给任何变量吗?
???持有人 = 字符串::compareToIgnoreCase;
但是我可以分配对象引用而不会出现任何问题,例如:
String aa = "aa";
Function compareFunction = aa::compareToIgnoreCase;
提前致谢, 阿卜杜勒
解决方案
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;
,在第一种情况下,我们需要 2 个参数:compareToIgnoreCase
将调用哪个方法的字符串,以及将在此方法中传递的字符串。它完美匹配的签名int compare(T o1, T o2);
。
在第二种情况下,您已经有一个参数 ( aa
)。所以你只需要一个,它将被传递到compareToIgnoreCase
. 它完全匹配R apply(T t);
推荐阅读
- python - 使用 anaconda 提示创建新的 scrapy 项目时出错
- html - 水平导航背景颜色中途停止
- python - 使用具有大量类别的附加列在条形图中绘制
- rest - REST API 设计 - 私有资源字段的最佳实践
- sql - 分组此 SQL 查询的问题
- reactjs - 使 TypeScript 函数接受 Redux 连接组件
- c# - IDisposable 对象是否在从方法返回后自行处理?
- c++ - 无法退出 do-while 循环?
- javascript - 每次点击时如何添加一定的数字?
- python - 在应用程序目录中找不到“figures.py”(Django-matplotlib 集成)