Java使用Lambda表达式实现Function <T,R>接口

Java使用Lambda表达式实现Function <T,R>接口

Function <T,R>接口是java.util.function包中的函数接口。此接口需要一个参数作为输入并生成结果。Function <T,R>接口可用作lambda 表达式方法引用的分配目标。它包含一个抽象方法:apply(),两个默认方法:andThen()compose() 以及一个静态方法:identity()

语法

@FunctionalInterface
public interface Function<T, R> {
   R apply(T t);//相当于参数的传递者

   default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
    Objects.requireNonNull(before);
    return (V v) -> apply(before.apply(v));
  }

  default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
    Objects.requireNonNull(after);
    return (T t) -> after.apply(apply(t));
 }

 static <T> Function<T, T> identity() {
    return t -> t;
 }
}

示例

import java.util.function.Function;

public class FunctionTest {
   public static void main(String[] args) {
      Function<Integer, Integer> f1 = i -> i*4;   // lambda      
      System.out.println(f1.apply(3));

      Function<Integer, Integer> f2 = i -> i+4;   // lambda      
      System.out.println(f2.apply(3));

      Function<String, Integer> f3 = s -> s.length();   // lambda      
      System.out.println(f3.apply("Adithya"));

      System.out.println(f2.compose(f1).apply(3));//先执行f1:3*4,然后执行12+4,例:3*4+4=16  说明:apply相当于参数传递者,第一次参数传递进来时3,因为需要先执行f1:i*4,此时参数值已变成12,然后再执行f2:i+4,所以最后的输出结果是:12+4=16
      System.out.println(f2.andThen(f1).apply(3));//先执行3+4,然后执行7*4,例:(3+4)*4=28  说明:与上面相反

      System.out.println(Function.identity().apply(10));//identity相当于静态方法,传入什么值就输出什么值
      System.out.println(Function.identity().apply("Adithya"));
   }
}

输出结果

12
7
7
16
28
10
Adithya
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值