【发布时间】:2023-01-08 21:19:02
【问题描述】:
在 collectors.java 类中,我找到了这个方法。我无法解释为什么你可以在这里使用数组索引。我的意思是这条线(a, t) -> { a[0] = op.apply(a[0], mapper.apply(t)); },
public static <T, U> Collector<T, ?, U> reducing(U identity,
Function<? super T, ? extends U> mapper,
BinaryOperator<U> op) {
return new CollectorImpl<>(
boxSupplier(identity),
(a, t) -> { a[0] = op.apply(a[0], mapper.apply(t)); },
(a, b) -> { a[0] = op.apply(a[0], b[0]); return a; },
a -> a[0], CH_NOID);
}
【问题讨论】:
-
“为什么”是什么意思?因为
a是一个数组? -
但是在这个类中的什么地方提到了 a 是一个数组。 CollectorImpl 的第二个参数是 BiConsumer<A, T> 累加器,为了在某处写 a[0] 需要说 a 是一个数组
-
那么你需要找到正在调用的
CollectorImpl的构造函数。它可能需要一些功能接口,并且这些功能接口有一个抽象方法,该方法将一些数组作为其第一个参数。 -
仔细看
boxSupplier的签名:) -
该过程称为类型推断.