程序员

Java 8 新特性 lambda表达式

2020-09-03  本文已影响0人  我有清风有烈酒

语法

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

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

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

parameters -> expression;
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

上一篇 下一篇

猜你喜欢

热点阅读