Lambda 表达式 与 函数式接口

Lambda 表达式

Lambda 表达式,也可称为闭包,是一个匿名函数
语法:(parameters) -> { statements; }

  1. ->将参数和实现分开
  2. (parameters),参数列表。参数类型可省略;只有一个参数()可省略;参数名称不允许与外层局部变量相同。
  3. { statements; },函数的具体实现。只有一行语句{}可省略,return不用写。只能引用标记了 final 的外层局部变量。

函数式接口

  1. 有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
  2. @FunctionalInterface标识函数式接口,但该标识不是必须的。不是函数式接口使用该标识会报错。

java.util.function

接口抽象方法解释
Predicate<T>boolean test(T t);断言型,有输入有返回
Function<T, R>R apply(T t);函数型,有输入有返回
Consumer<T>void accept(T t);消费型,有输入无返回
Supplier<T>T get();供给型,无输入有返回
    public static void main(String args[]) {
        Predicate<String> predicate = param -> false;  
        Function<String, String> function = param -> null;
        Consumer<String> consumer = param -> System.out.println(param);
        Supplier<String> supplier = () -> null;
        
        boolean test = predicate.test("");  //false
        String apply = function.apply("");  //null
        consumer.accept("");  //void
        String get = supplier.get(); //null
    }

方法引用

调用接口的方法,实际上调用的是接口引用的方法。

  1. 引用构造器: Class::new
  2. 引用静态方法:Class::static_method
  3. 类对象引用类的方法:Class::method
  4. 实例对象的方法引用:instance::method
    public static void main(String args[]) {
         //1. 引用构造器
        Supplier<String> supplier1 = () -> new String();
        Supplier<String> supplier2 = String::new;

        Function<String, String> function1 = param -> new String(param); 
        Function<String, String> function2 = String::new; //方法参数一致
        
        Predicate<String> predicate1 = param -> new Boolean(param);
        Predicate<String> predicate2 = Boolean::new;   //方法参数一致
        
        //2.引用静态方法
        Function<String, String> function3 = param -> String.valueOf(param);
        Function<String, String> function4 = String::valueOf;   //方法参数一致
        
        3.类对象引用类的方法
        Predicate<String> predicate3 = param -> param.isEmpty();
        Predicate<String> predicate4 = String::isEmpty;
        
        //4.实例对象的方法引用
        Function<Integer, Character> function5 = param -> "HELLO".charAt(param);
        Function<Integer, Character> function6 = "HELLO"::charAt;  //方法参数一致
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值