是否有“reduce”的类型安全 Java 实现?
我经常需要在java中运行reduce(也称为foldl/foldr,具体取决于您的上下文)来聚合Itterable的元素。
Reduce 接受一个集合/可迭代/等等、两个参数的函数和一个可选的起始值(取决于实现细节)。 该函数依次应用于集合的元素和先前调用reduce的输出,直到处理完所有元素,并返回最终值。
常见的 java api 中是否有类型安全的reduce 实现? Google 收藏集似乎应该有一个,但我一直没能做到找到它。 (可能是因为我不知道它会使用什么其他名称。)
I often need to run reduce (also called foldl / foldr, depending on your contexts) in java to aggregate elements of an Itterable.
Reduce takes a collection/iterable/etc, a function of two parameters, and an optional start value (depending on the implementation details). The function is successively applied to an element of the collection and the output of the previous invocation of reduce until all elements have been processed, and returns the final value.
Is there a type-safe implementation of reduce in any common java api? Google Collections seems like it should have one, but I haven't been able to find it. (possibly because I don't know what other names it would use.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
根据您的描述,您可能可以很容易地推出自己的泛型:
然后使用策略模式:
我确信存在大量语法错误,但这就是要点(您可以对如何获取然后要在特定的迭代器上使用它,只需动态定义您的Reducer:
根据迭代器的工作方式,只要迭代器朝正确的方向前进,它就可以向左折叠或向右折叠,
希望这会有所帮助。
you could probably roll your own generic pretty easily, based on your description:
Then using the strategy pattern:
I'm sure there are a ton of syntax errors but that's the main point (there a few choices you could make about how to get the empty accumulator value. Then to use it on a particular iterator just define your Reducer on the fly:
depending on how your iterator works this can fold left or fold right as long as the iterator goes in the right direction.
hope this helps.
根据 Luke 的建议,这是一个合法的 Java 实现:
Based on Luke's suggestion, here is a legit Java implementation:
尝试commons 函子包。 它一直在沙盒中,但我认为它会做你想做的事。
Try the commons functor package. It's been in sandbox forever, but I think it'll do what you want.