Lambda表达式

Lambda表达式是基于数学中的λ演算而得名,直接对应于其中的Lambda抽象。Lambda表达式是Java8中重要的新特性,支持将代码作为方法参数,允许使用更加简洁的代码来创建只有一个抽象方法的接口实例。

Lambda规范

普通方法的定义

返回类型 方法(参数列表){
    方法体
}

Lambda表达式(匿名方法)

(参数列表) -> {方法体}

Lambda表达式实际上是一个匿名方法,即没有方法名。表达式通常由参数列表、箭头和方法体组成

  • 参数列表允许省略形参的类型。如果只包含一个推断类型参数时,还可以省略小括号()
  • ->由英文的连字符(-)和大于号(>)组合,是Lambda运算符
  • 方法体可以是单一的表达式或多条语句组成的语句块。如果只有一条语句,则允许省略方法体的{};如果只有一条return语句,甚至可以省略return关键字。Lambda表达式需要返回值,如果方法体中仅有一条省略了return关键字的语句,则Lambda表达式会自动返回该条语句的结果值。

【示例】多参数、多语句的Lambda表达式

(int x,int y) -> {
    System.out.println(x);
    System.out.println(y);
    return x + y;
}

【示例】省略参数类型的Lambda表达式

(x,y) -> {
    System.out.println(x);
    System.out.println(y);
    return x + y;
}

【示例】省略{}和return关键字的Lambda表达式

(x,y) -> x + y

【示例】省略()、{}和return关键字的Lambda表达式

x -> ++x

【示例】没有参数的Lambda表达式

//没有参数,返回5
() -> 5
//没有参数,只打印信息
() -> System.out.println("你好");

Lambda应用

1.使用Lambda表达式输出集合内容

import java.util.Arrays;
import java.util.List;

public class LambdaDemo{
    public static void main(String []args){
        String[] names = {"test1","test2","test3"};
        List<String> arrNames = Arrays.asList(names);
        //传统的循环方式
        for(String name : arrNames){
            System.out.println(name);
        }

        //在Java8中使用Lambda表达式输出
        arrNames.forEach((name) -> System.out.println(name));
        //这里的name只是一个形式参数,name改为x也是一样运行的

        //在Java8中使用双冒号操作::
        arrNames.forEach(System.out::println);
    }
}

2.使用Lambda表达式实现排序

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class LambdaDemo2{
    public static void main(String[] args){
        List<String> arrNames1 = Arrays.asList("test1","test2","test3");
        //重写Comparator接口中的compare()方法实现排序
        Collections.sort(arrNames1,new Comparator<String>(){
            @Override
            public int compare(String a,String b){
                return b.compareTo(a);
            }
        });
        //使用Lambda表达式遍历输出
        arrNames1.forEach((x) -> System.out.println(x));

        List<String> arrNames2 = Arrays.asList("test1","test2","test3");
        //使用Lambda表达式简化方法的重写
        Collections.sort(arrNames2,(a,b) -> b.compareTo(a));
        arrNames2.forEach((x) -> System.out.println(x));
    }
}

3.使用Lambda表达式实现监听器

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class LambdaDemo3 extends JFrame{
    JPanel p;
    JTextArea ta;
    JButton btn1,btn2;
    public LambdaDemo3(){
        super("Lambdaces测试");
        p = new JPanel();
        ta = new JTextArea();
        btn1 = new JButton("传统方式");
        btn2 = new JButton("Lambda方式");
        //添加监听器
        btn1.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                ta.append("你单击了按钮1\n");
            }
        });

        //Lambda表达式
        btn2.addActionListener(e -> ta.append("单击了按钮2\n"));
        this.add(ta);
        p.add(btn1);
        p.add(btn2);
        this.add(p,BorderLayout.SOUTH);
        this.setSize(400,400);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args){
        new LambdaDemo3().setVisible(true);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值