Lambda 函数式编程

Lambda可看作是匿名内部类,但是不产生.class文件

另:有且仅有一个抽象方法的接口,称为函数式接口

组成

  • 一些参数
  • 一个箭头
  • 一段代码

标准格式

(参数类型 参数名称)→ {代码语句}

格式说明

  • 小括号内的语法与传统参数列表相同。无参留空,多参使用逗号分隔。
  • →代表指向动作
  • 大括号内的与传统方法体要求一致

省略规则

  • 小括号内的参数类型可以省略
  • 如果小括号内有且仅有一个参数,则小括号可以省略
  • 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号,return关键字及语句分号

使用前提

  • 必须具有接口,切结口内有且仅有一个抽象方法
  • 必须具有上下文推断,即:方法的参数或局部变量必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例

常用函数式接口

Supplier 生产型

java.util.function.Supplier<T>

无参方法:

  • T get() 用来获取一个泛型参数指定类型的对象数据

Lambda需要"对外提供"一个符合泛型类型的对象

Consumer 消费型

java.util.function.Consumer<T>

抽象方法:

  • void accept(T t) 意为消费一个指定泛型数据

默认方法:

  • andThen 可以实现效果:消费一个数据的时候,首先做一个操作,燃油再做另一个操作,实现组合

想要实现组合,需要两个或多个Lambda表达式

Predicate 条件性 (用于判断)

java.util.function.Predicate<T>

需要对某种类型的数据进行判断,从而得到boolean值结果

抽象方法:

  • boolean test(T t)

默认方法:

  • and         与
  • or            或
  • negate    非
//方法
method(Predicate<String> p){
    boolean b = p.test("TestString");
    sout("包含T吗"+b);
}

//调用
main{
    method(s→s.contains("T"));
}

使用格式:

p1.and(p2).test("TestString");
p.negete().test("TestString");

Function 转换型

java.util.function.Function<T,R>

用来根据一个类型的数据得到另一个类型的数据,前者称之为前置条件,后者称之为后置条件,有进有出。称为函数Function。

抽象方法:

  • R apply(T t) 根据T类型的参数获取R类型的结果

默认方法:

  • andThen
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值