Java8 - Lambda表达式

本文主要介绍Java8中的Lambda表达式,它需要函数式接口支持。函数式接口只有一个抽象方法,有常用和自定义之分。还阐述了Lambda表达式的结构、案例,以及类型推断,即程序可根据上下文推断参数类型,且入参和出参与函数式接口方法对应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java8 之 Lambda表达式

Java8 中的 Lambda表达式 需要“函数式”接口的支持;

1.函数式接口

函数式接口 :只有一个抽象方法的接口;

1.1 常用的函数式接口

  • 消费型接口:

Consumer<T>

    void accept(T t);
  • 供给型接口:

Supplier<T>

    T get();
  • 函数型接口:

Function<T, R>

    R apply(T t);
  • 断言型接口:

Predicate<T>

    boolean test(T t);

其他函数式接口可在 java.util.function 包中获取学习;

1.2 自定义函数式接口

@FunctionalInterface
public interface XXX<T , ...> {

    XXX xxx(T t , ...);
}

注意:

  • 使用 @FunctionalInterface 标识类,表示这是一个函数式接口,内部只能存在一个抽象方法;

2.Lambda表达式

结构 : (...) -> {...}

-> Lambda操作符 (或称为 剪刀操作符 )

左边 入参

右边 Lambda 体,即 Lambda 表达式要执行的功能

2.1 案例

Consumer<String> consumer = (t) -> System.out.println(t);

Supplier<String> supplier = () -> "hello";

Function<String, String> function = (t) -> t + "world";

Predicate<Integer> predicate = (t) -> t >= 60;

3.类型推断

Lambda 表达式中无需指定类型,程序依然可以编译,这是因为 javac 根据程序的上下文,在后台推断出了参数的类型。 Lambda 表达式的类型依赖于上下文环境,是由编译器推断出来的。这就是所谓的“类型推断”。

注意:

  • Lambda表达式 与 函数式接口 中的方法,入参和出参都是一一对应的;
  • 左边只有一个入参时,() 可以不写;
  • 右边代码块只有一句时,{} 可以不写;
  • 入参的类型是由JVM自动推断得到的;

转载于:https://my.oschina.net/mengzhang6/blog/2254593

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值