使用reduce合并功能

时间:2019-12-01 09:48:33

标签: java lambda java-8 reduce

我正在尝试通过以下代码使用reduce函数来组合功能:

mask = (df['Z'] >= 0) & (df['Z'] <= 1000) #creates a mask to filter dataframe on

df = df[mask]

但是我得到这个错误:

class CustomClass {
    private Function<Map<String, String>, Integer> cal;

    public CustomClass (Function<Map<String, String>, Integer>... func) {
        cal = Stream.of(func)
                .reduce(Function.identity(), Function::andThen);
    }
}

我在这里做什么错了?

1 个答案:

答案 0 :(得分:2)

如果第一个函数的结果与第二个函数所需的参数匹配,则只能合并两个函数。在您的示例中,情况并非如此,因为您的Function接受Map<String, String>,但是返回Integer。您不能将Integer作为参数传递给下一个Function

如果您更改了Function的签名,则代码将通过编译。

例如:

class CustomClass {
    private Function<Map<String, String>, Map<String, String>> cal;

    public CustomClass (Function<Map<String, String>, Map<String, String>>... func) {
        cal =  Stream.of(func)
                .reduce(Function.identity(), Function::andThen);
    }
}

class CustomClass {
    private Function<Integer,Integer> cal;

    public CustomClass (Function<Integer,Integer>... func) {
        cal =  Stream.of(func)
                .reduce(Function.identity(), Function::andThen);
    }
}

两次编译。