我正在尝试通过以下代码使用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);
}
}
我在这里做什么错了?
答案 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);
}
}
两次编译。