欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Lambda

程序员文章站 2022-05-22 21:18:57
...

一. 简介

Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码 像数据一样进行传递)。可以写出更简洁、更 灵活的代码。作为一种更紧凑的代码风格,使 Java的语言表达能力得到了提升.

二. 使用效果

2.1 未使用 lambda 和 使用 lambda 的区别

   /**
     * 未使用 lambda 表达式
     */
    @Test
    public void test01() {

        Comparator<Integer> comparator1 = new Comparator<Integer>() {

            @Override
            public int compare(Integer o1, Integer o2) {

                return Integer.compare(o1,o2);
            }
        };
        TreeSet set = new TreeSet(comparator1);


    }

    /**
     * 使用 lambda 表达式
     */
    @Test
    public void test02() {

        // 使用 lambda
        Comparator<Integer> comparator = (o1,o2) -> Integer.compare(o1,o2);
        TreeSet set = new TreeSet(comparator);

    }

三. 基本语法

Lambda 表达式在Java 语言中引入了一个新的语法元 素和操作符。这个操作符为 “->” , 该操作符被称 为 Lambda 操作符或剪头操作符。它将 Lambda 分为 两个部分:
左侧:指定了 Lambda 表达式需要的所有参数
右侧:指定了 Lambda 体,即 Lambda 表达式要执行 的功能。

        // 语法格式一: 无参, 无返回值, lambda 体只需要执行一条语句
        Runnable runnable = () -> System.out.println("hello world");

        // 语法格式二: 有一个参数, 并且无返回值
        Consumer<String> consumer = (args) -> System.out.println(args);

        // 语法格式三: 只有一个参数时,参数的小括号可以省略
        Consumer<String> consumer2 = args -> System.out.println(args);

        // 语法格式四: lambda 需要两个参数,多行执行语句,并且有返回值
        Comparator<Integer> comparator = (a, b) -> {
            System.out.println("hello world");
            return Integer.compare(a, b);
        };

        // 语法格式五: lambda 需要两个参数,一条执行语句,并且有返回值
        Comparator<Integer> comparator2 = (a, b) -> Integer.compare(a, b);

        // 语法格式六: lambda 表达式的参数列表的数据类型可以省略不写,因为 jvm 编译器可以通过上下文推断出数据类型,即"类型推断"
        Comparator<Integer> comparator3 = (Integer a, Integer b) -> Integer.compare(a, b);

四. 函数式接口

只包含一个抽象方法的接口,称为函数式接口。
你可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda
表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方
法上进行声明)。
我们可以在任意函数式接口上使用 @FunctionalInterface 注解,
这样做可以检查它是否是一个函数式接口,同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口。
Lambda 表达式需要"函数式接口"的支持
一个抽象方法不会报错.
Lambda

两个抽象方法编译报错.
Lambda

相关标签: Lambda