为一个真正的基本类写一个lambda表达式

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

有两个功能接口

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表达式如何?

java lambda interface
1个回答
0
投票

您的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的次数。

© www.soinside.com 2019 - 2024. All rights reserved.