Lambda表达式

一、介绍接口实现的三种方法,引出Lambda表达式。

  定义接口(comparator):

1
2
3
interface comparator{ 
int compare(int a,int b); //抽象方法
}

  定义实现类(Mycomparator):

1
2
3
4
5
6
class Mycomparator implements comparator{  //实现类必须实现接口里面的所有抽象方法
@override
public int compare(int a,int b){
return a-b;
}
}

  • 1.使用接口实现类
    1
    2
    3
    4
    5
    6
    public class ChengXu{
    public static void main(String[] args){
    comparator comparator1=new Mycomparator(); //多态(左边父类,右边子类) 编译在左,实现在右
    comparator1.compare;
    }
    }

  • 2.使用匿名接口类
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class ChengXu{
    public static void main(String[] args){
    comparator comparator2=new comparator(){ //哪个接口要实现就写哪个接口的匿名抽象类
    @override
    public int compare(int a,int b){
    return a-b;
    }
    }
    }
    }

  • 3.使用Lambda表达式
    1
    2
    3
    4
    5
    public class ChengXu{
    public static void main(String[] args){
    comparator comparator3=(a,b) ->a-b;
    }
    }

二、Lambda表达式的基本语法
1.Lambda表达式只能描述只有一个抽象方法的接口(@FunctionalInterface注释)。
2.也可以用于集合类中遍历集合元素。
3.包含三个部分

  1. 形参列表:允许省略参数类型。(一个参数的话可以省略形参的圆括号)。
  2. 箭头(->):必须有英文画线和大于符号组成。
  3. 代码块:如果只有一句,省略”{}”。
  4. java8中引入了一个新的操作符”->”(箭头操作符/Lambda操作符),将Lambda表达式拆分为两个部分:
  5. 左边:Lambda表达式的参数列表(实现的抽象方法参数相同)
  6. 右边:Lambda表达式中所需要的功能(方法体)

三、函数式接口
  代表只含有一个抽象方法接口(默认方法、类方法可以有很多)。
  JAVA8专门为函数式接口提供了@FunctionalInterface注解。放在接口定义的前面,用于告诉编译器执行更为严格检查,不是函数式接口就会报错。


例如:

1
2
3
4
5
6
Runnable r=()->{
for(int i=0;i<100;i++)
{
System.out.println();
}
};

解释:
Lambda表达式实现的是匿名方法(只能实现特定函数式接口的唯一方法),因此就有两个限制

  1. Lambda表达式的目标类型必须是明确的函数式接口。(我觉得最适合的就是(参数列表强制类型转换))
  2. Lambda表达式只能为函数式接口创建对象。

Java在java.util.function包下面预定义了很多函数式接口

  1. XxxFunction:这类接口中通常有一个apply()抽象方法,对参数处理后返回一个新的值。
  2. XxxConsumer:这类接口中通常有一个accept()抽象方法,对参数处理后但是不返回新的值。
  3. XxxPredicate:这类接口中通常有一个test()抽象方法,对参数进行某种处理后返回一个boolean值,用于筛选数据。
  4. XxxSupplier:这类接口中通常有一个getAsXxx()抽象方法,不需要输入一个值通过某种算法返回一个值。

四、方法引用和构造器引用
  如果Lambda表达式的代码块只有一条代码,那么就可以在代码块中使用方法引用和构造器引用。

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
,