Java8之方法引用

  • 为什么使用方法引用
    方法引用可以让你重复使用现有的方法定义,并像Lambda一样传递他们。在某些情况下,比起使用Lambda表达式,他们更易读。方法引用可以被看作仅仅调用特定方法的Lambda的一种快捷写法。方法引用就是根据已有的方法实现来创建Lambda表达式,但是,显示地指明方法的名称,这样使得代码的可读性更高。
  • 使用场景
    如果一个Lambda表达式代表的只是“调用某一方法”,那么就可以适用方法引用。
  • 方法引用格式
    目标引用 :: 方法名称
  • 方法引用构建:编译器会进行一个与Lambda表达式类似的类型检查过程,来确定对于给定的函数式接口,这个方法引用是否有效:方法引用的签名必须和上下文类型匹配
    • 指向静态方法的方法引用
      // Lambda
      Function<String,Integer> stringIntegerFunction = (String s)->Integer.parseInt(s);
      // 方法引用
      stringIntegerFunction = Integer :: parseInt;
      
    • 指向任意类型实例方法的方法引用
      stringIntegerFunction = (String s) -> s.length();
      stringIntegerFunction = String::length;
      
    • 指向现有对象的实例方法的方法引用
      Orange orange = new Orange();
      orange.setWeight(10.34);
      Supplier<Double> supplier = ()->orange.getWeight();
      supplier = orange :: getWeight;
      
    • 构造函数引用
      @Getter
      @Setter
      @NoArgsConstructor
      @AllArgsConstructor
      @RequiredArgsConstructor
      public class Orange {
      
          @NonNull
          private Double weight;
      
          private String color;
      }
      
      //无参构造函数
      Supplier<Orange> supplierConstructor = ()->new Orange();
      Orange orangeConstructor = supplierConstructor.get();
      
      supplierConstructor = Orange::new;
      orangeConstructor = supplierConstructor.get();
      
      //一个参数
      Function<Double,Orange> functionConstructor = Orange::new;
      orangeConstructor = functionConstructor.apply(10.00);
      
      functionConstructor = (weight)-> new Orange(weight);
      orangeConstructor = functionConstructor.apply(10.00);
      
      //2个参数
      BiFunction<Double,String,Orange> biFunctionConstructor = Orange::new;
      orangeConstructor = biFunctionConstructor.apply(10.00,"red" );
      
      biFunctionConstructor = (weight,color)->new Orange(weight,color);
      orangeConstructor = biFunctionConstructor.apply(10.00,"red" );
      
      //超过二个参数的可自定义函数接口
      @FunctionalInterface
      public interface BiiFunction<T,U,K,R> {
      
          R apply(T t,U u,K k);
      }
      

更多文章:
优快云博客
简书博客
公众号:代码小搬运
代码小搬运.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值