Java中为何Comparator.comparingInt在Arrays.sort()中无法生效?
为什么Arrays.sort无法排序List,但List.sort可以?
咱们先拆解你遇到的问题核心——Arrays.sort工具方法根本不支持直接传入List类型的参数!
先看你报错的那段代码:
Arrays.sort(intervals, Comparator.comparingInt(interval -> interval.start));
这里的intervals是List<Interval>,但Java中Arrays.sort接受Comparator的重载方法签名是这样的:
public static <T> void sort(T[] a, Comparator<? super T> c)
它明确要求第一个参数必须是数组(T[]),而不是List集合。所以编译器直接抛出类型不匹配的错误,提示java.util.List<Interval> cannot be converted to T[],这就是你看到编译错误的根源。
再看你能正常运行的代码:
intervals.sort(Comparator.comparingInt(interval -> interval.start));
这是List接口从Java 8开始新增的实例方法,它的签名是:
default void sort(Comparator<? super E> c)
这里的E就是List的元素类型(也就是你的Interval类),你传入的Comparator.comparingInt(interval -> interval.start)正好是针对Interval的比较器,完全符合Comparator<? super Interval>的要求,所以编译和运行都毫无问题。
最后再给你梳理下两个方法的适用场景:
Arrays.sort是专门用来排序数组的工具类方法,如果非要用它处理List,得先把List转成数组(比如intervals.toArray(new Interval[0])),但这完全是多此一举;- List自带的
sort方法就是为集合排序量身设计的,用法更直接,不需要额外的类型转换,是处理List排序的首选方式。
内容的提问来源于stack exchange,提问作者injoy
相关产品推荐
相关产品推荐

