gpt4 book ai didi

java - 是否有 'reduce' 的类型安全 Java 实现?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:29:19 26 4
gpt4 key购买 nike

我经常需要在 java 中运行 reduce(也称为 foldl/foldr,具体取决于您的上下文)来聚合 Itterable 的元素。

Reduce 采用集合/可迭代等,一个有两个参数的函数,以及一个可选的起始值(取决于实现细节)。该函数依次应用于集合中的一个元素和先前调用 reduce 的输出,直到处理完所有元素,并返回最终值。

在任何常见的 java api 中是否有 reduce 的类型安全实现? Google Collections 似乎它应该有一个,但我没能找到它。 (可能是因为我不知道它会使用什么其他名称。)

最佳答案

根据您的描述,您可能很容易推出自己的通用型:

public interface Reducer<A, T>
{
public A foldIn(A accum, T next);
}

然后使用策略模式:

public class Reductor<A, T>
{
private Reducer<A, T> worker;
public Reductor<A, T>(Reducer<A, T> worker)
{
this.worker = worker;
}

public A fold(A rval, Iterator<T> itr)
{
while(itr.hasNext())
{
A rval = worker.foldIn(rval, itr.next());
}
return rval;
}
}

我敢肯定有很多语法错误,但这是重点(关于如何获取空累加器值,您可以做出一些选择。然后要在特定的迭代器上使用它,只需在飞:

Reductor r = new Reductor<A, T>(new Reducer<A, T>()
{
public A foldIn(A prev, T next)
{
A rval;
//do stuff...
return rval;
}
}

A fold = r.fold(new A(), collection.getIterator());

根据迭代器的工作方式,只要迭代器朝正确的方向移动,它就可以向左折叠或向右折叠。

希望这对您有所帮助。

关于java - 是否有 'reduce' 的类型安全 Java 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/223013/

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