通过Arrays.sort对int数组进行逆序报错
Java的Arrays.sort()仅支持对 引用数据类型进行自定义排序,如果是基本数据类型(如int类型),将无法使用Comparator进行自定义排序。
昨天在做一个算法题需要对int数组进行排序,使用了匿名内部类报错
int[] arr=newint[]{1,2,3,4};
Arrays.sort(arr,(o1,o2)->(o2-o1));//提示报错
报错有两个原因:
自己在写匿名内部类直接用lambda省略很多,没有加以考虑
由于Arrays.sort()仅支持对引用数据类型进行自定义排序,所以针对于int类型数组,是不可以用的,那我们只有在定义时候选择定义成Integer,或者将其转换为Integer。
什么是lambda表达式
lambda表达式本质上是一个匿名方法。让我们来看下面这个例子:
public int add(int x, int y) {
return x + y;
}
转成lambda表达式后是这个样子:
(int x, int y) -> x + y;
参数类型也可以省略,Java编译器会根据上下文推断出来:
(x, y) -> x + y; //返回两数之和
或者
(x, y) -> { return x + y; } //显式指明返回值
可见lambda表达式由三部分组成:参数列表,箭头(->),以及一个表达式或语句块。
Lambda语法注意点:
参数类型可以省略
假如只有一个参数,()括号可以省略
如果方法体只有一条语句,{}大括号可以省略
如果方法体中唯一的语句是return返回语句,那省略大括号的同事return也要省略
问题:
在这我问大家一个问题,如果现在有两个参数,而且两个参数的类型不同,那么使用lambda表达式可以省略参数吗?