Java相当于Python的itertools.groupby()?

时间:2011-07-14 04:10:10

标签: java python functional-programming

以下是Python中itertools.groupby()的示例用例:

from itertools import groupby

Positions = [   ('AU', '1M', 1000),
                ('NZ', '1M', 1000),
                ('AU', '2M', 4000),
                ('AU', 'O/N', 4500),  
                ('US', '1M', 2500), 
           ]

FLD_COUNTRY = 0
FLD_CONSIDERATION = 2

Pos = sorted(Positions, key=lambda x: x[FLD_COUNTRY])
for country, pos in groupby(Pos, lambda x: x[FLD_COUNTRY]):
    print country, sum(p[FLD_CONSIDERATION] for p in pos)

# -> AU 9500
# -> NZ 1000
# -> US 2500

Java中是否有任何语言构造或库支持可以实现或可以实现上面itertools.groupby()所做的事情?

2 个答案:

答案 0 :(得分:6)

最接近的可能是Apache Functor。看看Examples of Functors, Transformers, Predicates, and Closures in Java,你会在哪里找到一个例子。

BTW - 不要指望在Python中看到类似于2-3行代码的东西。 Java并未被设计为具有良好功能特性的语言。它根本不包含许多像脚本语言那样的语法糖。 Maybe in Java 8 will see more of these things coming together。这就是Scala出现的原因,see this question我之前做过的,我得到了很好的相关答案。正如您在我的问题中所看到的,实现递归函数在Python中比在Java中更好。 Java有很多很好的功能,但绝对功能编程并不是其中之一。

答案 1 :(得分:0)

我有完全相同的问题,并通过这个问题的答案找到了neoitertools:http://code.google.com/p/neoitertools/Is there an equivalent of Python's itertools for Java?