美文网首页程序员
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、9 语言新特性

    Java语言新特性 Java8 Java 8 新特性 Lambda 表达式 Lambda表达式(也叫做闭包)是Ja...

  • 《Java 8实战》学习总结

    Java 8新特性概览 Lambda表达式 流 默认方法 Lambda表达式 Lambda和函数式接口Java 8...

  • java lambda 表达式

    java lambda 表达式 lambda 是 java 8 引入的新特性,lambda 能替换简单的函数和类,...

  • Lambda in Android

    Android 如何实现支持 lambda 表达式 lambda 表达式是 java 8 新引入的语言特性,使用了...

  • Java8 之 Lambda 表达式与函数式接口

    一、Lambda 表达式 Lambda 表达式,也可称为闭包,它是 Java 8 发布的最重要新特性。Lambda...

  • java8 新特性

    java8 新特性 1 Lambda表达式 lambda 是一个匿名函数, lambda 表达式基本语法: jav...

  • Lambda表达式详解

    什么是Lambda表达式 Lambda表达式是Java 8的新特性,是函数式接口的实例。使用Lambda表达式可以...

  • Java 8 lambda 表达式

    lambda 表达式是 Java 8 支持的新特性之一。通过 lambda 表达式,Java 具备了函数式编程的能...

  • java8

    现代化 Java - Java8 指南 JAVA8新特性(吐血整理) 理解 Lambda 表达式

  • Java 8 CompletableFuture

    Java 8 CompletableFuture Java 8 有大量的新特性和增强如 Lambda 表达式,St...

网友评论

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

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