Lamdba表达式使用
1 思想 “说重点”
service. submit ( new Runnable ( ) {
@Override
public void run ( ) {
System. out. println ( Thread. currentThread ( ) . getName ( ) ) ;
}
} ) ;
2 Lambda表达式格式
service. submit ( ( ) - > System. out. println ( Thread. currentThread ( ) . getName ( ) ) ) ;
3 Lambda表达式使用,无参数无返回值
package com. qfedu. c_lambda;
interface Cook {
void cooking ( ) ;
}
public class Demo1 {
public static void main ( String[ ] args) {
invokeCook ( new Cook ( ) {
@Override
public void cooking ( ) {
System. out. println ( "麻辣香锅,孜然肉片,土豆牛肉,蒜薹肉丝" ) ;
}
} ) ;
invokeCook ( ( ) - > {
System. out. println ( "蒜蓉油麦菜,番茄鸡蛋" ) ;
} ) ;
invokeCook ( ( ) - > System. out. println ( "明天早上自己炸油条" ) ) ;
}
public static void invokeCook ( Cook cook) {
cook. cooking ( ) ;
}
}
4 Lambda表达式使用,有参数有返回值
package com. qfedu. c_lambda;
import java. util. Arrays;
import java. util. Comparator;
public class Demo2 {
public static void main ( String[ ] args) {
Person[ ] persons = {
new Person ( "骚磊" , 16 ) ,
new Person ( "老黑" , 50 ) ,
new Person ( "老付" , 40 ) ,
new Person ( "污云" , 35 ) ,
new Person ( "朋朋" , 14 ) ,
new Person ( "大哥" , 18 ) ,
} ;
Arrays. sort ( persons, new Comparator < Person> ( ) {
@Override
public int compare ( Person o1, Person o2) {
return o1. getAge ( ) - o2. getAge ( ) ;
}
} ) ;
Arrays. sort ( persons, ( Person o1, Person o2) - > {
return o2. getAge ( ) - o1. getAge ( ) ;
} ) ;
Arrays. sort ( persons, ( o1, o2) - > o2. getAge ( ) - o1. getAge ( ) ) ;
for ( Person person : persons) {
System. out. println ( person) ;
}
}
}
package com. qfedu. c_lambda;
interface A {
float add ( int num1, float num2) ;
}
public class Demo3 {
public static void main ( String[ ] args) {
System. out. println ( new A ( ) {
@Override
public float add ( int num1, float num2) {
return num1 + num2;
}
} . add ( 5 , 13.5F ) ) ;
test ( 5 , 13.5F , ( num1, num2) - > {
float sum = num1 + num2;
return sum;
} ) ;
}
public static void test ( int num1, float num2, A a) {
System. out. println ( a. add ( num1, num2) ) ;
}
}
5 Lambda表达式使用前提
1. 有且只有一个缺省属性为public abstract方法的接口,例如 Comparator<T>接口,Runnable接口
2. 使用lambda表达式是有一个前后要求约束的
方法的参数为接口类型,或者说局部变量使用调用方法,可以使用lambda也OK
3. 有且只有一个抽象方法的接口,称之为【函数式接口】