以Arrays.sort(intervals, (a, b) - Integer.compare(a[0], b[0]));为例子Arrays.sort方法要求第二个参数是Comparatorint[]编译器通过(a, b)得知参数类型Comparatorint[]会去找这个接口然后下面只有一个抽象方法compare然后就重写这个方法重写的内容就是Integer.compare(a[0], b[0])1.Lambda 表达式的本质(a,b)-Integer.compare(a[0],b[0])这行代码的本质是一个匿名函数的简写形式2.一步步还原 Lambda原始需求Arrays.sort()需要第二个参数是Comparatorint[]类型的对象publicstaticTvoidsort(T[]a,Comparator?superTc)演化过程第1层最原始的方式 - 创建实现类classMyComparatorimplementsComparatorint[]{Overridepublicintcompare(int[]a,int[]b){returnInteger.compare(a[0],b[0]);}}Arrays.sort(intervals,newMyComparator());第2层匿名内部类Arrays.sort(intervals,newComparatorint[](){Overridepublicintcompare(int[]a,int[]b){returnInteger.compare(a[0],b[0]);}});第3层Lambda 表达式Arrays.sort(intervals,(a,b)-Integer.compare(a[0],b[0]));3.Lambda 的编译原理当你写 Lambda 时编译器会推导类型知道a和b是int[]类型因为intervals是int[][]生成方法创建一个与Comparatorint[].compare()签名匹配的方法创建实例在运行时创建该接口的实例反编译后近似于// 编译器生成的近似代码privatestaticintlambda$main$0(int[]a,int[]b){returnInteger.compare(a[0],b[0]);}// 然后创建 Comparator 实例Arrays.sort(intervals,newComparatorint[](){Overridepublicintcompare(int[]a,int[]b){returnlambda$main$0(a,b);}});4.Lambda 的语法解析(参数列表)-{方法体}(a,b)-Integer.compare(a[0],b[0])(a, b)参数列表类型自动推断-Lambda 运算符Integer.compare(a[0], b[0])方法体单行时可省略 {} 和 return
关于Lambda表达式
以Arrays.sort(intervals, (a, b) - Integer.compare(a[0], b[0]));为例子Arrays.sort方法要求第二个参数是Comparatorint[]编译器通过(a, b)得知参数类型Comparatorint[]会去找这个接口然后下面只有一个抽象方法compare然后就重写这个方法重写的内容就是Integer.compare(a[0], b[0])1.Lambda 表达式的本质(a,b)-Integer.compare(a[0],b[0])这行代码的本质是一个匿名函数的简写形式2.一步步还原 Lambda原始需求Arrays.sort()需要第二个参数是Comparatorint[]类型的对象publicstaticTvoidsort(T[]a,Comparator?superTc)演化过程第1层最原始的方式 - 创建实现类classMyComparatorimplementsComparatorint[]{Overridepublicintcompare(int[]a,int[]b){returnInteger.compare(a[0],b[0]);}}Arrays.sort(intervals,newMyComparator());第2层匿名内部类Arrays.sort(intervals,newComparatorint[](){Overridepublicintcompare(int[]a,int[]b){returnInteger.compare(a[0],b[0]);}});第3层Lambda 表达式Arrays.sort(intervals,(a,b)-Integer.compare(a[0],b[0]));3.Lambda 的编译原理当你写 Lambda 时编译器会推导类型知道a和b是int[]类型因为intervals是int[][]生成方法创建一个与Comparatorint[].compare()签名匹配的方法创建实例在运行时创建该接口的实例反编译后近似于// 编译器生成的近似代码privatestaticintlambda$main$0(int[]a,int[]b){returnInteger.compare(a[0],b[0]);}// 然后创建 Comparator 实例Arrays.sort(intervals,newComparatorint[](){Overridepublicintcompare(int[]a,int[]b){returnlambda$main$0(a,b);}});4.Lambda 的语法解析(参数列表)-{方法体}(a,b)-Integer.compare(a[0],b[0])(a, b)参数列表类型自动推断-Lambda 运算符Integer.compare(a[0], b[0])方法体单行时可省略 {} 和 return