【Java】Lambda表达式——省略写法

Lambda表达式——省略写法

小贴士:
Lambda表达式,简单易懂,可遇不可求,看懂会用即可,不要刻意而为之。在实际的应用开发中,一般遇到@FunctionalInterface注解的接口才使用Lambda表达式。

Lambda概述

Lambda表达式是JDK 8开始后的一种新语法形式。

  • 作用:简化函数式接口的匿名内部类的写法。

Lambda表达式的简化格式

在这里插入图片描述

注意:Lambda表达式只能简化函数式接口的匿名内部类的写法形式

  • 什么是函数式接口?

首先必须是接口、其次接口中有且仅有一个抽象方法的形式
通常我们见到的函数式接口上都有一个@FunctionalInterface注解,标记该接口必须是满足函数式接口。

Lambda表达式的省略写法

进一步在Lambda表达式的基础上继续化简

  1. 参数类型可以省略不写。
  2. 如果只有一个参数,参数类型可以省略,同时()也可以省略。
  3. 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号!
  4. 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写

通过创建一个窗口添加按钮的案例,进行理解Lambda表达式是如何一步步化简的。

案例代码:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Butten {
    public static void main(String[] args) {
        JFrame win = new JFrame("登录页面");
        JButton button = new JButton("按钮");

        //为按钮设置监听
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("点击了一下");
            }
        });
        //为窗口添加按钮
        win.add(button);
        //设置窗口的大小
        win.setSize(400,300);
        //显示组件
        win.setVisible(true);
    }
}

运行结果:

在这里插入图片描述
当点击窗口中的按钮时,控制台会输出 “点击了以下”

点击了一下
点击了一下

简化步骤:

查看addActionListener方法源码,发现其参数是一个ActionListener接口,查看ActionListener接口源码,可知,它虽然没有@FunctionalInterface注解标记,但是它有且仅有一个抽象方法,满足Lambda表达式的使用条件

public void addActionListener(ActionListener l) {
        listenerList.add(ActionListener.class, l);
    }
  • ActionListener 接口源码:
public interface ActionListener extends EventListener {

    /**
     * Invoked when an action occurs.
     */
    public void actionPerformed(ActionEvent e);

}
  • 应用Lambda表达式,对上面的案例进行初步简化代码
//为按钮设置监听
        button.addActionListener((ActionEvent e) ->{
                System.out.println("点击了一下");
        });
  • 进一步在Lambda表达式的基础上继续简化
  1. 参数类型可以省略不写。
 button.addActionListener((e) -> {
            System.out.println("点击了一下");
		});
  1. 如果只有一个参数,参数类型可以省略,同时()也可以省略。
button.addActionListener(e -> {
            System.out.println("点击了一下");
        });
  1. 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号!
button.addActionListener(e -> System.out.println("点击了一下"));
  1. 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写
  • 此处,借用数组的排序的案例进行理解,Arrays提供很多关于数组的API,调高了数组编码的效率。
  //对数组进行其他顺序进行排序
        Integer[] a1 = {36,12,24,48,16};
        Arrays.sort(a1, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
//                return o1 - o2;  //升序
                return o2 - o1;     //降序
            }
        });
  • 查看Comparator接口源码,发现恰好有@FunctionalInterface注解,满足使用Lambda表达式的要求。
@FunctionalInterface
public interface Comparator<T>
  • 对其进行简化:
Arrays.sort(a1,( o1,  o2)-> o2 - o1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷糊小丸子o_o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值