Java
Python前端运维数据库
Java
Java
  • 新特性
    • Record
    • Optional
  • 面向对象
    • 面向对象基础
    • 构造方法
    • 继承与多态
    • 接口
    • 修饰符
    • 代码块
    • 接口(Interface)
    • 枚举类
  • IO流
    • IO
      • 字节流
      • 字符流
      • 缓冲流
      • 转换流
      • 操作ZIP
      • File 对象
    • NIO
      • Channel和Buffer
      • 异步文件通道AsynchronousFileChannel
      • Selector
      • Path/Files/Pipe
  • 反射
  • 内存分配
  • 集合
    • 简介
    • List
    • Set
    • Map
    • EnumMap
  • 日期与时间
    • Date和Calendar
    • Java8 新时间 ✨
      • LocalDateTime
      • ZonedDateTime
      • Duration
    • 时间格式化
      • SimpleDateFromat
      • DateTimeFormatter ✨
    • Instant
    • 实践
  • 网络编程
    • IP 地址
    • 网络模型
    • TCP 编程
    • UDP 编程
    • HTTP 编程
  • 加密和安全
  • 并发编程
    • 多线程
    • 线程与进程的区别
    • 线程组和线程优先级
    • 线程池
    • 线程锁
  • 异步任务
    • Future
    • CompletableFuture
      • 开启异步任务
      • 串行任务方法
      • 并行任务方法
      • 任务结束方法
      • 异常处理方法
      • 查看状态方法
      • 设置任务结果方法
  • 执行系统命令
  • Stream 流
    • Stream 流的创建
    • Stream 流串行与并行
    • Stream 流中间操作
    • Stream 流终端操作
  • Lambda 表达式
    • Lambda 表达式简介
    • Lambda 表达式语法
    • 方法引用
  • String
  • StringBuffer
由 GitBook 提供支持
在本页
  • Lambda 表达式简介
  • 函数式接口
  • 什么是函数式接口
  • 内置的函数式接口

这有帮助吗?

  1. Lambda 表达式

Lambda 表达式简介

上一页Lambda 表达式下一页Lambda 表达式语法

最后更新于8个月前

这有帮助吗?

Lambda 表达式简介

Lambda 表达式是在 JDK 8 版本中引入的一个新特性,用于取代大部分的匿名内部类。Lambda 表达式的语法非常简洁,可以用更少的代码来实现同样的功能。同时,JDK 中增加了一些函数式接口,用于支持 Lambda 表达式的使用。

例如,下面是一个使用匿名内部类的示例:

在 Java8 版本中函数式编程成为了一个重要的特性,Lambda 表达式是函数式编程的一种实现方式。Lambda 表达式可以将函数作为参数传递给其他函数,从而实现更加灵活的编程方式。

函数式编程是一种编程范式,它将计算机程序视为数学函数的计算。在函数式编程中,函数是一等公民,可以作为参数传递给其他函数,也可以作为返回值返回。Lambda 表达式是函数式编程的一种实现方式,它可以将函数作为参数传递给其他函数,从而实现更加灵活的编程方式。

函数式接口

什么是函数式接口

函数式接口是只包含一个抽象方法,但是可以有多个非抽象方法(默认方法、静态方法或者 Object 类中的方法)的接口。函数式接口可以被隐式转换为 Lambda 表达式。只要确保接口类中只有一个抽象方法,Lambda 表达式就可以被赋值给该接口。

在创建函数式接口时,可以使用 @FunctionalInterface 注解来标识该接口是一个函数式接口。如果接口不符合函数式接口的定义,编译器会报错。这个注解是可选的,但是推荐使用,即使不使用这个注解,只要接口符合函数式接口的定义,也可以被当作函数式接口使用。

@FunctionalInterface
interface Person {
    void say(String message);
}

@FunctionalInterface 标记在接口上,指仅仅包含一个抽象方法的接口。

  • 该注解只能标记在“有且仅有一个抽象方法”的接口上。

  • JDK8 接口中的静态方法和默认方法,都不算抽象方法。

  • 接口默认继承 java.lang.Object,所以接口显示声明覆盖了 Object 中的方法,那么也不算抽象方法。

  • 该注解不是必须的,如果一个接口符合“函数式接口”定义,那么加不加该注解没有影响,加上该注解能更好的让编译器进行检查。

函数式接口和 Lambda 表达式的关系

  • 函数式接口是 Lambda 表达式的目标类型,Lambda 表达式可以赋值给函数式接口。

  • 函数式接口只包含一个抽象方法,Lambda 表达式可以实现该抽象方法。

  • 函数式接口可以有多个非抽象方法,Lambda 表达式可以调用这些非抽象方法。

使用 Lambda 表达式来表示一个接口的实现(Java8 之前一般都是使用匿名类实现):

内置的函数式接口

Java 8 中增加了一些函数式接口,用于支持 Lambda 表达式的使用。这些函数式接口定义在 java.util.function 包中,如下表所示:

接口
描述

BiConsumer<T,U>

代表了一个接受两个输入参数的操作,并且不返回任何结果。

BiFunction<T,U,R>

代表了一个接受两个输入参数的方法,并且返回一个结果。

BinaryOperator

代表了一个作用于于两个同类型操作符的操作,并且返回了操作符同类型的结果。

BiPredicate<T,U>

代表了一个两个参数的 boolean 值方法。

BooleanSupplier

代表了 boolean 值结果的提供方。

Consumer

代表了接受一个输入参数并且无返回的操作。

DoubleBinaryOperator

代表了作用于两个 double 值操作符的操作,并且返回了一个 double 值的结果。

DoubleConsumer

代表一个接受 double 值参数的操作,并且不返回结果。

DoubleFunction

代表接受一个 double 值参数的方法,并且返回结果。

DoublePredicate

代表一个拥有 double 值参数的 boolean 值方法。

DoubleSupplier

代表一个 double 值结构的提供方。

DoubleToIntFunction

接受一个 double 类型输入,返回一个 int 类型结果。

DoubleToLongFunction

接受一个 double 类型输入,返回一个 long 类型结果。

DoubleUnaryOperator

接受一个参数同为类型 double,返回值类型也为 double。

Function<T,R>

接受一个输入参数,返回一个结果。

IntBinaryOperator

接受两个参数同为类型 int,返回值类型也为 int。

IntConsumer

接受一个 int 类型的输入参数,无返回值。

IntFunction

接受一个 int 类型输入参数,返回一个结果。

IntPredicate

接受一个 int 输入参数,返回一个布尔值的结果。

IntSupplier

无参数,返回一个 int 类型结果。

IntToDoubleFunction

接受一个 int 类型输入,返回一个 double 类型结果。

IntToLongFunction

接受一个 int 类型输入,返回一个 long 类型结果。

IntUnaryOperator

接受一个参数同为类型 int,返回值类型也为 int。

LongBinaryOperator

接受两个参数同为类型 long,返回值类型也为 long。

LongConsumer

接受一个 long 类型的输入参数,无返回值。

LongFunction

接受一个 long 类型输入参数,返回一个结果。

LongPredicate

R 接受一个 long 输入参数,返回一个布尔值类型结果。

LongSupplier

无参数,返回一个结果 long 类型的值。

LongToDoubleFunction

接受一个 long 类型输入,返回一个 double 类型结果。

LongToIntFunction

接受一个 long 类型输入,返回一个 int 类型结果。

LongUnaryOperator

接受一个参数同为类型 long,返回值类型也为 long。

ObjDoubleConsumer

接受一个 object 类型和一个 double 类型的输入参数,无返回值。

ObjIntConsumer

接受一个 object 类型和一个 int 类型的输入参数,无返回值。

ObjLongConsumer

接受一个 object 类型和一个 long 类型的输入参数,无返回值。

Predicate

接受一个输入参数,返回一个布尔值结果。

Supplier

无参数,返回一个结果。

ToDoubleBiFunction<T,U>

接受两个输入参数,返回一个 double 类型结果

ToDoubleFunction

接受一个输入参数,返回一个 double 类型结果。

ToIntBiFunction<T,U>

接受两个输入参数,返回一个 int 类型结果。

ToIntFunction

接受一个输入参数,返回一个 int 类型结果。

ToLongBiFunction<T,U>

接受两个输入参数,返回一个 long 类型结果。

ToLongFunction

接受一个输入参数,返回一个 long 类型结果。

UnaryOperator

接受一个参数为类型 T,返回值类型也为 T。

Drawing
Drawing