Java8 - Lambda表达式

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值