gpt4 book ai didi

java - 柯里化(Currying)一个现有的静态函数

转载 作者:搜寻专家 更新时间:2023-10-31 08:16:28 25 4
gpt4 key购买 nike

为了充分利用 Java 中的函数组合,我想柯里化(Currying)一些我常用的现有静态函数。柯里化(Currying)的完美候选者是 Apache Commons StringUtils .

举个具体的例子,假设我想 curry StringUtils.remove(String str, String remove)方法来提供一个名为(比如)removeCommas 的函数。

一种可能的实现是:

Function<String, String> removeCommas = s -> StringUtils.remove(s, ",");

但这不是柯里化(Currying)。我希望能够使用方法引用运算符(例如 StringUtils::remove)以更实用的方式实现这一点,但我无法弄清楚语法是什么样的。

想法?

最佳答案

你可以像这样 curry remove():

Function<String, Function<String, String>> remove = r -> s -> StringUtils.remove(s, r);
Function<String, String> removeCommas = remove.apply(",");

如果你更喜欢方法引用,你可以创建一个通用的辅助方法来柯里化(Currying)任何固定数量的方法:

static <T, U, R> Function<T, Function<U, R>> curry(BiFunction<T, U, R> function) {
return a -> b -> function.apply(a, b);
}
// ...
Function<String, Function<String, String>> remove = curry(StringUtils::remove);

请注意,此助手遵循参数顺序,因此上述函数将在删除字符串之前捕获目标字符串。无法对方法引用中的参数重新排序,因此您必须选择一个顺序并坚持下去。

关于java - 柯里化(Currying)一个现有的静态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42822820/

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