Java中的lambda表达式详解

戚薇 Java教程 发布时间:2022-07-12 15:53:05 阅读数:1016 1
下文笔者讲述java中Lambda详细简介,如下所示

Lambda简介

Lambda表达式是JDK8开始后的一种新语法形式

Lambda功能

简化匿名内部类的代码写法

Lambda语法格式

(匿名内部类被重写方法的形参列表)->{
    被重写方法的方法体代码
}
注:->是语法形式,无实际意义
首先我们先定义一个抽象类
通过匿名内部类重写其方法
再对其进行简化
比较二者之间有何变化:
例:
使用Lambda前后的效果
public static void main (String[] args){
    People p = new People(){
    @Override
    public void run(){
        System.out.println("打印出相关信息!");
        }
    };
    p.run();    
 
}
abstract class People{
    public abstract void run();
}

使用Lambda表达式之后
People p = ()->{
    System.out.println("打印出相关信息!");
};
//此处会出现报错
//由于lambda只能简化函数式接口匿名内部类的写法形式
//且接口中有且仅有一个抽象方法
//我们会再接口上加上一个@Functionalinterface注解,标记该接口必须是满足函数式接口。

例:实际意义上的Lambda简化

@FunctionalInterface//加上这个注解必须是函数式接口,且只有一个抽象方法
interface People{
    void run();
}
//简化之前的匿名内部类
People p = new People(){
    @Override
    public void run(){
        System.out.println("打印输出信息");
    }
};
//简化之后
People p = () -> {
        System.out.println("打印输出信息");
};
另外,也可以将其作为参数代入方法中去使用:

//在原来的基础上定义一个pk方法
public static void pk(People p){
    System.out.println("打印新")
    p.run();
}
//不使用Lambda的情况下:
pk(p);//需要在定义匿名内部类之后,将p代入;
//使用Lambda的情况:
People p = () -> {
        System.out.println("打印输出信息");
};
pk(() -> {
        System.out.println("打印输出信息");
});
//由于等号右边即是People创建的对象p,因此可以可以直接将其代入

Lambda的优点

 Lambda是一个匿名函数
可以把Lambda表达式理解为是一段可以传递的代码
它可以写出更简洁、更灵活的代码
作为一种更紧凑的代码风格
使Java语言表达能力得到了提升

Lambda使用场景简介

//精简之前:
Arrays.sort(grade,new Comparator<Integer>(){
    @Override
    public int compare(Integer o1,Integer o2){
        return o2 -o1;
}
});
//精简之后:
Arrays.sort(grade,(Integer o1,Integer o2) -> {
        return o2 -o1;
});
Lambda表达式省略规则 
参数类型可以省略不写
//参考前面的实战例子
Arrays.sort(grade,(Integer o1,Integer o2) -> {
        return o2 -o1;
});
//省略参数类型之后
Arrays.sort(grade,( o1, o2){
        return o2 -o1;
});
如果只有一个参数,参数类型可以省略,同时()也可以省略
//简单引用一个单个参数的例子,不需要了解其具体含义
btn.addActionlistener((ActionEvent e) -> {
    System.out.println("我是简单的例子。");
});
//简化之后:
btn.addActionListener( e -> {
    System.out.println("我是简单的例子。");
});
如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号
//参照上一条规则的例子
btn.addActionListener( e -> {
    System.out.println("我是简单的例子。");
});
//简化之后:
btn.addActionListener( e -> System.out.println("我是简单的例子。") );
如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写
//参照第一条规则的代码
Arrays.sort(grade,(Integer o1,Integer o2) -> {
        return o2 -o1;
});
//简化之后:
Arrays.sort(grade,( o1, o2)-> o2 -o1);
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202207/3961.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者