美文网首页程序员
Java 8 新特性 lambda表达式

Java 8 新特性 lambda表达式

作者: 我有清风有烈酒 | 来源:发表于2020-09-03 10:19 被阅读0次

    语法

    lambda表达式最明显的就是 “->” 符号;
    例:

    /**
    * parameters 可看作参数;
    * -> 后的 expression 可看作方法体(处理逻辑)
    * -> 后的方法体如果只包含有一个处理语句,可不用写打括号 {};
    */
    (parameters) -> expression;
    /**
    * 若方法体中有多条处理语句,则需要将多条处理语句放入大括号中;
    */
    (parameters) -> {
                       expression1;
                       expression2;
                       ……
                     }
    

    在Java 8 的lambda表达式中,不仅方法体的大括号可以省略(在只有一条处理语句时),还有很多其他的重要特性;

    • 可选的参数小括号
      如果参数只有一个时,参数的小括号可忽略不写
    parameters -> expression;
    
    • 可选的参数类型声明
      在Java7之前的语法,参数是需要声明类型的,但是在Java8的lambda表达式中,参数有时不需要声明类型,因为lambda表达式会通过上下文来判断参数的类型是什么;
    Comparator<Integer> c = (Integer x, Integer y) -> x + y;
    // 上面的代码也可以利用lambda的 可选参数类型声明的特性,将参数的类型忽略不写;
    Comparator<Integer> c = (x, y) -> x + y;
    

    上面这两行代码其实表达的内容是一样的。

    函数式接口

    lambda表达式可实现的前提就是函数式接口,上文提到的Comparator<T>就是一个函数式接口;


    Comparator<T>接口

    从上图可看出,在这个接口上有一个信息的注释 @FunctionalInterface,这个@FunctionalInterface注释就是用来声明函数式接口的(当然也可以不加@FunctionalInterface注解,但是为了代码规范和可读性,只要是函数式接口就需要@FunctionalInterface注解来声明)。
    Java 8 还新增了很多函数式接口。

    写一个自己的函数式接口

    通过上文知道,函数式接口需要通过@FunctionalInterface来声明;

    // 声明此接口为函数式接口
    @FunctionalInterface
    public interface MathOperation {
        int operation(int x, int y);
        
    }
    // 这是一个简单的函数式接口
    

    如何使用自己的函数式接口

    MathOperation addOperation = (x, y) -> x + y;
    System.out.println("x + y = " + addOperation.operation(2, 2));
    
    // 输出结果为:x + y = 4
    

    一开始的时候我看这里也是云里雾里的,但是看一下用非lambda语法来实现的代码就会清楚很多:

    // 这川代码等同于上面👆代码,是不是就清晰了很多。。。
    System.out.println("x + y =" + new MathOperation() {
                @Override
                public int operation(int x, int y) {
                    return x + y;
                }
            }.operation(2,2));
    

    其实Java 8 新特性 lambda表达式还有很多东西,我所写的内容也不完全对。
    参考:https://www.runoob.com/java/java8-lambda-expressions.html

    相关文章

      网友评论

        本文标题:Java 8 新特性 lambda表达式

        本文链接:https://www.haomeiwen.com/subject/dwhnsktx.html