假设我有这个命令代码:
List<Function<T, T>> functions = ...
T value = ...
for (Function<T, T> function : functions) {
value = function.apply(value);
}
我该如何以函数式的方式写这篇文章(就像fold在Scala中做的那样)?
这里有一个关于尤金答案的变体,只是为了好玩:
public static <T> Function<T, T> combine(List<Function<T, T>> functions) {
return new Object() {
Function<List<Function<T, T>>, Function<T, T>> combiner = list ->
list.size() == 1 ? list.get(0) :
list.get(0).andThen(this.combiner.apply(list.subList(1, list.size())));
}.combiner.apply(functions);
}
这将创建一个具有递归lambda属性的匿名内部类。这个属性被命名为cominer
,它是一个高阶函数,它将函数列表作为参数,并作为结果返回函数。如果列表只包含一个元素,则此高阶函数返回列表的第一个函数,或者将andSo
应用于列表的第一个函数,该函数的子列表为以第二个元素开始的函数。
需要匿名内部类,因为递归lambda只能定义为类的属性。
不用说,这比使用函数::和
二进制运算符对列表进行流式处理和缩减要复杂得多。此外,递归lambda不是免费的:它们使用堆栈进行递归调用。
几小时前刚刚有人向消费者询问这一问题。。。您可以将它们简化为单个函数并应用:
@SafeVarargs
private static <T> Function<T, T> combineF(Function<T, T>... funcs) {
return Arrays.stream(funcs).reduce(Function.identity(), Function::andThen);
}
问题内容: 可以说我有一个这样的列表: 我有一个函数,假设我想将该函数应用于该函数的每个子列表,可以计算出有关两个列表的一些分数。如何将此功能应用于的每个列表并在新列表中返回每个分数,如下所示: 我尝试使用以下功能: 问题答案: 您可以使用内置函数来执行此操作。 因此,如果您要应用的函数是,则可以执行以下操作: 在中,上面返回了一个地图迭代器,因此您需要一个显式调用: 如果您要为此编写一些必须在P
我从这个URL刮取了这个表: "https://www.patriotsoftware.com/blog/accounting/average-cost-living-by-state/" 看起来像这样: 然后我编写了这个函数来帮助我将字符串转换成整数: 当我只将函数应用于一列时,它就会工作。我在这里找到了关于在多个列上使用的答案:如何将函数应用于多个列 但我下面的代码不起作用,也不会产生错误:
我有以下函数(一个以列作为输入的热编码函数)。我基本上想把它应用到我的数据框中的一列,但似乎不明白出了什么问题。 猜我怎么称呼它有问题?
在执行时,是否有一种方法可以将聚合函数应用于dataframe的所有列(或列表)?换句话说,是否有一种方法可以避免对每个列都这样做:
怎么办? **添加详细示例如下***
问题内容: 如何将函数应用于变量输入列表?例如,函数返回真值,但不返回函数的实际输出。 预期的输出是: 我知道是内置的。这只是一个例子。 问题答案: 我认为您的意思是使用而不是: 更简单的是,您可以使用而不是从中导入(感谢@alecxe): 在Python 2.x中,通过将给定函数应用于列表中的每个元素来构造新列表。通过限制使用给定函数求值的元素来构造新列表。 在Python 3.x中,和构建迭代