Java 如何知道String::compareTo
调用时使用哪个方法引用Collections.sort(someListOfStrings, String::compareTo);
?compareTo
不是静态的,它需要知道value
比较的“左侧”。
问问题
2706 次
2 回答
15
假设您使用Comparator
接口的方法引用:
Comparator<String> cmp = String::compareTo;
当您调用cmp.compare(left, right)
(即Comparator
接口的“单一抽象方法”或“SAM”)时,神奇的事情发生了:
int result = cmp.compare(left, right);
| |
/------------------------/ |
| /---------------/
| |
left.compareTo(right);
基本上SAM的所有参数都转换为引用方法的参数,但是this
object(在左侧)也算作参数。
于 2015-09-06T04:08:10.073 回答
0
OK,Collections.sort() 的源码如下:
public static <T> void sort(List<T> list, Comparator<? super T> c) {
Object[] a = list.toArray();
Arrays.sort(a, (Comparator)c);
ListIterator i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set(a[j]);
}
}
我想现在已经很清楚了。内容是一个列表。这意味着它有一个订单,并且项目按该顺序一一处理。
于 2015-09-05T23:14:12.713 回答