1.使用场景
如果匿名内部类是一个接口,并且当中只有一个抽象方法需要重写,可以使用Lambda表达式。
2.Lambda表达式格式
(参考列表) -> {代码}
先写匿名内部类,然后通过alt+回车进行修改
3.在IDEA中lambda与匿名内部类的转化
lambda转成匿名内部类:
匿名内部类转成lambda:
4.例题
4.1
public void test(){
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("峰哥升仙");
}
}).start();
new Thread(() ->{System.out.println("峰哥升仙");}).start();
}
4.2
public static int Feng(IntBinaryOperator binaryOperator){
int a=10;
int b=20;
return binaryOperator.applyAsInt(a,b);
}
@Test
public void test1(){
int feng = Feng((left, right) -> {
return left + right;
});
System.out.println(feng);
}
4.3
public static void Guo(IntPredicate predicate){
int arr[]={1,2,3,4,5,6};
for (int i : arr) {
if(predicate.test(i)){
System.out.println(i);
}
}
}
@Test
public void test2(){
Guo((int value) -> {
return value%2==0;
});
}
4.4
public static <R> R type(Function<String,R> stringRFunction){
String str="12345";
R apply = stringRFunction.apply(str);
return apply;
}
@Test
public void test3(){
Object type = type((String s) -> {
return s;
});
System.out.println(type);
}
4.5
public static void forecahArr(IntConsumer intConsumer){
int arr[]={1,2,3,4,5,6,7,8,9,10};
for (int i : arr) {
intConsumer.accept(i);
}
}
@Test
public void test4(){
forecahArr((int value) -> {
value+=3;
System.out.println(value);
});
}
5.省略规则
1.参数类型可以直接省略
2.方法体只有一句代码时,大括号return和唯一一句代码的分号可以省略
3.方法只有一个参数时小括号可以省略
4.以上这些规则记不住可以省略不记
双冒号::(JAVA8特性的一种)
双冒号:: 写法,这被称为“方法引用”,而双冒号是一种新的语法
方法引用写法: System.out::println
其中:
什么是函数式接口
所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法。
这种类型的接口也称为SAM接口,即Single Abstract Method interfaces。
@FunctionalInterface 仅对抽象方法检查。是函数式接口
1、该注解只能标记在"有且仅有一个抽象方法"的接口上。
2、JDK8接口中的静态方法和默认方法,都不算是抽象方法。
3、接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么 也不算抽象方法。
版权声明:本文为qq_48581332原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。