【Java基础】Java8新特性-Lambda表达式

2022-05-12 20:01:19 浏览数 (1)

本篇目录

1、Lambda表达式是什么 2、Lambda表达式的语法 3、Lambda表达式的特点 4、Lambda表达式的简单使用 5、为什么使用Lambda表达式 6、方法引用 7、函数式接口

1 Lambda表达式是什么?

Lambda表达式是Java8中添加的一个新特性,允许把函数作为一个方法的参数,称为“函数式编程”。

举个例子

代码语言:javascript复制
List<Integer> list=new ArrayList<>();
list.forEach(item->{
    System.out.println(item);
});

上面代码中List将匿名函数 Lambda 的表达式作为 forEach() 方法的参数,实现了遍历集合的操作。

2 Lambda表达式的语法

一个最简单的lambda表达式如下:

代码语言:javascript复制
Test test=()->{
  System.out.println("我是方法体");
}

这段代码表示将实现一个接口的方法,()表示参数,{}表示方法体。

3 Lambda表达式特点

① 当参数只有一个时,()可省略。

② 当方法体只有一句时,{}可省略。

③ 当方法有返回值时,方法体只有一个返回语句时,return关键字可以省略。

4 Lambda表达式的简单使用

定义一个接口

代码语言:javascript复制
public interface TestInterface {
    void test(String str);
}

使用Lambda表达式实现接口

代码语言:javascript复制
public static void main(String[] args) {
    TestInterface test=(a)->{
        System.out.println(a);
    };
    test.test("测试");
}

5 为什么使用Lambda表达式

Lambda表达式允许把函数作为一个参数进行传递,使Lambda表达式可以写出更简洁的代码风格,以极少的代码使表达能力大大提升。

6 方法引用

当多个Lambda表达式是相同内容时,我们可以定义一个公共方法,通过方法引用来实现接口,可以避免代码重复。

在Lambda表达式简单使用的例子基础上,加入如下内容:

公共方法

代码语言:javascript复制
public void test(String t){
    System.out.println("我是公共方法,参数为:" t);
}

方法引用

代码语言:javascript复制
Main m = new Main();
TestInterface test=m::test;
test.test("测试");

当目标方法是静态方法时,可以直接通过类名引用,如:

代码语言:javascript复制
TestInterface test=Main::test;

当目标方法是构造方法时,还可以写做如下形式:

代码语言:javascript复制
TestInterface test=Main::new;

7 函数式接口

在任意函数式接口上使用@FunctionalInterface注解来标识这个接口是一个函数式接口。

7.1 Java内置四大核心函数式接口

7.2 自定义函数式接口

创建一个函数式接口

代码语言:javascript复制
@FunctionalInterface
public interface TestInterface<T> {
    T test(String str);
}

创建一个方法,将函数式接口作为方法参数

代码语言:javascript复制
public static String test(TestInterface<String> param){
    return "测试函数式接口";
}

调用如上方法

代码语言:javascript复制
String val=test(t->{
    return t.toLowerCase();
});
System.out.println(val);

0 人点赞