我学习Java的lambda语法时遇到的问题

问题描述 投票:0回答:1

Java.util.function.Function

中的默认方法
default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
 Objects.requireNonNull(after);
 return (T t) -> after.apply(apply(t));
}
default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
 Objects.requireNonNull(before);
 return (V v) -> apply(before.apply(v));
}

main

Function<Integer, Integer> doubleFunction = x -> x * 2;
Function<Integer, Integer> squareFunction = x -> x * x;

int result1 = doubleFunction.apply(5); //  10
int result2 = squareFunction.apply(5); //  25

Function<Integer, Integer> integerIntegerFunction = doubleFunction.andThen(squareFunction);

int result3 = doubleFunction.andThen(squareFunction).apply(5); // 100
int result4 = doubleFunction.compose(squareFunction).apply(5); // 50

问题:语句-

 doubleFunction.compose(squareFunction).apply(5)
doubleFunction.compose
返回
(V v) -> apply(before.apply(v))
,外层代码
apply(...)
如何运行?

before.apply(v)
返回 int 数字,假设返回符号 res。对于
(V v) -> apply(res)
,这怎么能看做是doubleFunction的实例化调用。【池英语,sry】

java lambda
1个回答
0
投票

Compose 组合一个在调用 compose 方法的 lambda 之前计算的函数。

那么。

int result4 = doubleFunction.compose(squareFunction).apply(5);
System.out.println(result4);

相同
result4 = doubleFunction.apply(squareFunction.apply(5));
System.out.println(result4);
        
        
© www.soinside.com 2019 - 2024. All rights reserved.