gpt4 book ai didi

java - 当调用 IntBinaryOperator 的新实例时,ApplyAsInt 如何自动工作?

转载 作者:行者123 更新时间:2023-11-29 07:23:49 25 4
gpt4 key购买 nike

我完成了一个编程练习,然后检查了其他人的答案。我发现了一个我很难理解的问题。

练习题是:“给定一串大写字母,例如ABC,返回缺失字母的个数”

ABC, returns 0
ABD returns 1, because C is missing
BCF returns 3, because A, D and E are missing.

import java.util.function.IntBinaryOperator;

public class TrainInspector {

static class Op implements IntBinaryOperator {
int prev = 'A';

@Override
public int applyAsInt(int left, int right) {
left += right - prev - 1;
prev = right;
return left;
}
}

public static int countMissingCarriages(String train) {
if ( train == null || train.isEmpty() ) return 0;
return train.chars().reduce(1, new Op());
}

}

我知道 reduce 从给定的参数中为我们提供了一个 int。但是,我不明白在创建新的 IntBinaryOperator 时 applyAsInt 如何自动工作。

我已阅读:

http://www.java2s.com/Tutorials/Java/java.util.function/IntBinaryOperator/index.htm

https://www.geeksforgeeks.org/stream-reduce-java-examples/

最佳答案

她就是它使用applyAsInt()方法的方式

来自 abstract class IntPipeline

@Override
public final int reduce(int identity, IntBinaryOperator op) {
return evaluate(ReduceOps.makeInt(identity, op));
}

来自 final class ReduceOps

static TerminalOp<Integer, Integer> makeInt(int identity, IntBinaryOperator operator) {
class ReducingSink implements ... {
private int state;

//...

@Override
public void accept(int t) {
state = operator.applyAsInt(state, t); // <----------
}

//...
}
return new ReduceOp<Integer, Integer, ReducingSink>(StreamShape.INT_VALUE) {
@Override
public ReducingSink makeSink() {
return new ReducingSink();
}
};
}

关于java - 当调用 IntBinaryOperator 的新实例时,ApplyAsInt 如何自动工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58471447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com