Java的拉姆达表达式
2020-10-13 本文已影响0人
bangbang2
拉姆达表达式由三部分构成
()代表参数
->
{}可省略,主体可以是表达式和语句,如果是表达式需要去return,但是语句只需要执行即可


匿名内部类的意思就是这个类没有名字,只有new xxx,如下,可以在匿名内部类写方法

外部比较器,去实现Comparator接口,利用匿名内部类,来实现比较,其中写<int []>来代表参数,然后在匿名类内部去实现或重写compare方法,下面是实现比较二维数组的第一维元素的实现,compare(int [] a,int [] b)该方法的参数,int [] a代表取该二维数组的一行,然后return a[0]-b[0];,如果a[0]-b[0]>0就返回1,代表顺序
Arrays.sort(intervals, new Comparator<int []>(){//<int []>代表参数,这就叫匿名内部类
public int compare(int [] a,int [] b){
return a[0]-b[0];//顺序
}
看看这个例子:


也可以利用拉姆达表达式来实现,含义和之前的一样
Arrays.sort(intervals, (int [] a,int [] b)->a[0]-b[0]
内部比较器:
需要来实现Comparable接口,在类内部去实现compareTo()方法,具体的实现和compare方法类似,去调用java.util.Arrays.sort()方法,不用像Comparator去指定容器,这个默认使用内部比较器
