Java lambda函数如何对自定义ArrayList进行排序<;间隔>;? 公共类间隔{ int启动; 内端; Interval(){start=0;end=0;} 区间(ints,inte){start=s;end=e} 公共ArrayList合并(ArrayList间隔){ interval.sort((i1,i2)->i1.start-i2.start); //还有代码吗 返回间隔; } }

Java lambda函数如何对自定义ArrayList进行排序<;间隔>;? 公共类间隔{ int启动; 内端; Interval(){start=0;end=0;} 区间(ints,inte){start=s;end=e} 公共ArrayList合并(ArrayList间隔){ interval.sort((i1,i2)->i1.start-i2.start); //还有代码吗 返回间隔; } },java,arraylist,collections,lambda,Java,Arraylist,Collections,Lambda,在此代码段中,没有显式定义sort方法,但当main方法调用merge时,此interval.sort将对给定的ArrayList间隔进行排序。有人能解释一下Interval.sort是如何在内部工作的吗?排序方法是列表中的一个库函数。 参考链接: 在给定的代码中,我们使用lambda表达式传递一个比较器(i1,i2)->i1.start-i2.start,它基本上按照start值的升序对列表进行排序 (i1,i2)->i1.start-i2.start被推断为一个比较器,这就是为什么。但是使用

在此代码段中,没有显式定义sort方法,但当main方法调用merge时,此interval.sort将对给定的ArrayList间隔进行排序。有人能解释一下Interval.sort是如何在内部工作的吗?

排序方法是列表中的一个库函数。
参考链接:

在给定的代码中,我们使用lambda表达式传递一个比较器
(i1,i2)->i1.start-i2.start
,它基本上按照
start
值的升序对列表进行排序

(i1,i2)->i1.start-i2.start
被推断为一个
比较器,这就是为什么。但是使用减号作为比较器是非常不可取的,因为它可能导致溢出。干净的解决方案是使用
(i1,i2)->Integer.compare(i1.start,i2.start)
Comparator.comparingit(i->i.start)
public class Interval{
    int start;
    int end;
    Interval(){ start = 0; end = 0; }
    Interval(int s, int e){ start = s; end = e }

    public ArrayList<Interval> merge(ArrayList<Interval> intervals){
        intervals.sort((i1,i2) -> i1.start - i2.start);
        //some more code
        return intervals;
    }
}