Lambda表达式初体验

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

Lambda表达式是Java8中的新特性,来源于数学中的λ演算,是一套关于函数定义,输入量,输出量的计算方案。编码时,我们一般尽可能轻量级的将代码封装为数据,可以解决传统方法通过接口和实现类(匿名内部类)实现的语法冗余,this关键字,变量捕捉,数据控制等问题。

1 传统方法

1.1 传统方法-子类实现接口

首先,我们有一个接口

public interface Factory {
    Object getObject();
}
复制代码

还有一个简单的对象User

public class User {
    private String name;
    private int age;
    //省略构造方法及get set
}
复制代码

SubClass继承了这个接口

public class SubClass implements Factory{
    @Override
    public Object getObject() {
        return new User();
    }
}
复制代码

当我们想调用这个方法的时候:

Factory factory = new SubClass();
User user1 = (User) factory.getObject();
System.out.println(user1);
复制代码

1.2 传统方法-匿名内部类

当使用匿名内部类的时候:

factory = new Factory() {
    @Override
    public Object getObject() {
        return new User("Luke",12);
    }
};
User user2 = (User) factory.getObject();
System.out.println(user2);
复制代码

2 Labda表达式

2.1 基本形式

将匿名内部类的内部方法提出来,前边加一个()->

factory = () ->{
    return new User("Luke",12);
};
User user3 = (User) factory.getObject();
System.out.println(user3);
复制代码

2.2 先小结一哈

Lambda其实就是一个函数

它使得代码变得简洁紧凑

并且这里可以引入一个概念叫函数式编程

扫描二维码关注公众号,回复: 14244410 查看本文章
  • Lambda表达式可以赋值给变量
  • Lambda表达式可以作为参数进行传递
  • Lambda表达式可以作为返回值

3 Lambda的语法格式

3.1 执行语句

(parameters)-> {statements;}

  • parameters: 函数的参数列表
  • statements:执行语句
  • ->:使用指定的参数完成某个功能
(int a, int b)->{return a+b;}
复制代码

3.2 表达式

(parameters)-> expression

  • parameters: 函数的参数列表
  • expression: 表达式
  • ->:使用指定的参数完成某个功能
(int a, int b) -> a+b
复制代码

4 Lambda的语法格式

4.1 可选的大括号

函数体只包含一个语句,则不需要大括号

(String str) -> System.out.println(str);
复制代码

4.2 可选的参数圆括号

只有一个参数的时候可以省略圆括号和类型

str -> System.out.println(str);
复制代码

4.3 可选的返回关键字return

函数体只有一个表达式,且运算结果匹配返回类型

(int a, int b) -> a+b
复制代码

4.4 可选的声明类型

不需要参数类型,编译器可以根据参数值进行推断

(a, b) -> a+b
复制代码

5 使用Lambda的前提

必须有一个函数式接口

那么什么是函数式接口呢?

有且只有一个抽象方法的接口称之为函数式接口

猜你喜欢

转载自juejin.im/post/7101544180127645704