一、定义:
这是一种用来简化编程的表达式,它可以返回一个实现函数式接口,并重写其中唯一必须重写的抽象方法的实现类的对象。
二、格式:
(参数列表)->{
方法体
}
三、类型
1、无返回值
(1)无参
接口:
public interface NoneReturnNoneParam {
void test();
}
测试类:
public class Test8 {
public static void main(String[] args) {
NoneReturnNoneParam s1=()->{
System.out.println("这是一个无参无返回值的方法");
};
s1.test();
}
}
(2)有参:
①一个参:
接口:
@FunctionalInterface
public interface NoneReturnSingleParam {
void test(int a);
}
测试类:
public class Test4 {
public static void main(String[] args) {
NoneReturnSingleParam n2=(int a)->{
System.out.println("这是一个参的lambda表达式,参数a为" + a);
};
n2.test(100);
}
}
②多个参
接口:
public interface NoneReturnMultipleParam {
void test(int i,int j);
}
测试类:
public class Test9 {
public static void main(String[] args) {
NoneReturnMultipleParam s2=(int i,int j)->{
System.out.println("这是多个参的无返回值方法,参数a为"+i+"参数b为"+j);
};
s2.test(200,300);
}
}
2、有返回值:
无参:
接口
@FunctionalInterface
public interface SingleReturnNoneParam {
int test();
}
测试类:
public class Test6 {
public static void main(String[] args) {
SingleReturnNoneParam s1 =()->{
System.out.println("这是无参有返回值的lambda表达式");
return 10;
};
int res=s1.test();
System.out.println(res);
}
}
多个参数:
测试类:
public class Test7 {
public static void main(String[] args) {
SingleReturnMultiplyParam s3=(int i,int j)->{
System.out.println("这是有两个参的lambda值表达式");
return i+j;
};
int res =s3.test(100,200);
System.out.println(res);
}
}
接口:
@FunctionalInterface
public interface SingleReturnMultiplyParam {
int test(int a,int b);
}
四、注意:
在lambda表达式中,参数类型可以忽,但是要省略都省略,如果只有一个参数,那么小括号也能省略,
如果只有一行代码,那么大括号也能省略
1、如果只有一行代码,那么大括号也能省略
public class Test8 {
public static void main(String[] args) {
NoneReturnNoneParam s1=()->
System.out.println("这是一个无参无返回值的方法");
s1.test();
}
}
2、如果只有一个参数,那么小括号也能省略,
public class Test4 {
public static void main(String[] args) {
NoneReturnSingleParam n2=a->{
System.out.println("这是一个参的lambda表达式,参数a为" + a);
};
n2.test(100);
}
}
3、参数类型可以忽,但是要省略都省略,
public class Test7 {
public static void main(String[] args) {
SingleReturnMultiplyParam s3=( i, j)->{
System.out.println("这是有两个参的lambda值表达式");
return i+j;
};
int res =s3.test(100,200);
System.out.println(res);
}
}
4、如果大括号省略,而仅有一行return语句,那么return语句不能写
public class Test7 {
public static void main(String[] args) {
SingleReturnMultiplyParam s3=( i, j)->
i+j;
int res =s3.test(100,200);
System.out.println(res);
}
}
利用lambda表达式来写线程同步
public class Test11 {
public static void main(String[] args) {
Thread thread =new Thread(()->{
for (int i = 1; i <=400; i++) {
System.out.println("子线程" + i);
}
});
thread.start();
for (int i = 1; i <=400 ; i++) {
System.out.println("主线程" + i);
}
}
}