有两个功能接口
public interface BoolBiFunction {
boolean apply( int p1, int p2 );
}
public interface IntFunction {
int apply(int p);
}
以及以下课程
public class IntData {
private int[] intValues;
public IntData(int[] p) {
intValues = p;
}
public int compute(BoolBiFunction f, IntFunction g, int x) {
int result = 0;
for (int value : intValues) {
if (f.apply(value, x)) {
result = result + g.apply(value);
}
}
return result;
}
任务是使用参数,因此compute会告诉数字intValues字段中出现数字的频率。但是说实话,我什至不真正理解给定方法计算的结果。
if ( f.apply( value, x ) )
{
result = result + g.apply( value );
}
f似乎可以比较这两个整数,但是g.apply还能做什么?以及用于检查intValues字段中数字出现频率的lambda表达式如何?
您的compute
方法接受一个BoolBiFunction
,它测试两个int
值是否满足某些条件。如果它们满足条件(即f.apply(value, x)
为true
),则将IntFunction
应用于当前值的结果相加。
例如,如果要找出intValues
数组中有多少个元素等于5,则必须调用:
IntData someObject = ...
int numberOf5s = someObject.compute((x,y) -> x == y,
x -> 1,
5);
这意味着[且仅当传递给它的两个BoolBiFunction
相等时,true
才返回int
。
IntFunction
总是返回1
,因此它将计算在intValues
数组中找到第三个参数-5的次数。