java after 函数_Java的函数式接口Function中的andThen方法,完全看不懂,求解答?

第一点疑惑:看方法定义

default Function andThen(Function super R, ? extends V> after) {

Objects.requireNonNull(after);

return (T t) -> after.apply(apply(t));

}

看到default后面的了么,一般我们形参需要使用泛型的话,这个泛型定义在方法前面,换个例子看一下:

public static ApiResponse success(T data) {

return new ApiResponse<>(SUCCESS.getCode(), SUCCESS.getMsg(), data);

}

上面这个方法,形参是T类型的,返回值也是T类型的,而这个T,就定义在方法定义返回值前面,表示一个未知类型。

andThen方法的参数after泛型中的V就是这个意思,表示一个未知的类型,其实这里用什么表达都行,什么ABCDEFH,只是表达这个Lambda表达式的返回值。

第二点疑惑:这两个方法,andThen表示一个在外面那个Function执行之后调用,compose表示在外面那个Function执行之前调用。

我们看andThen定义:

default Function andThen(Function super R, ? extends V> after) {

Objects.requireNonNull(after);

return (T t) -> after.apply(apply(t));

}

andThen其实是定义了一个新的Function返回。

after.apply是执行andThen方法的形参的Lambda表达式,apply(this.apply)是执行当前Lambda表达式。

比如下面这个例子,我们定义两个表达式:

Function functionA = i -> i * 2;

Function functionB = i -> "-" + i;

functionA表示把参数乘以2,functionB表示把参数前面加个字符串"-",注意这两个的返回值不同。

调用andThen方法:

functionA.andThen(functionB).apply(2)

根据andThen的定义,上面的代码可以换成下面这个:

Function functionA = i -> i * 2;

Function functionB = i -> "-" + i;

Function functionC = t -> functionB.apply(functionA.apply(t));

在对比下andThen定义:

default Function andThen(Function super R, ? extends V> after) {

Objects.requireNonNull(after);

return (T t) -> after.apply(apply(t));

}

apply(this.apply)就是functionA.apply,after.apply就是functionB.apply

functionC就是andThen返回的新Function

我们调用functionC与调用functionA.andThen(functionB)是等价的。

在上面那个例子中:

functionA.andThen(functionB).apply(2);

Function functionA = i -> i * 2;

Function functionB = i -> "-" + i;

Function functionC = t -> functionB.apply(functionA.apply(t));

它们的返回值都是"-4"

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值