你推荐使用哪个Java集合库?

5
我接手了一个Java代码库的团队。
该代码库使用了很多明确的“for each”循环。我想在将来的代码中使用Commons Collections的转换器和谓词以及其收集和转换方法来替换这些循环(注意:不是现有的代码)。
然而,Commons Collection不是通用的。我的代码库剩下的部分虽然有其他缺陷,但是它是通用的,我不想引入大量的强制类型转换。
因此,我正在查看带有泛型的Commons-Collections(http://sourceforge.net/projects/collections/)和Guava(以前是Google Collections)(http://code.google.com/p/guava-libraries/)。
问题一:这两个库都被广泛认为是安全的生产使用吗?您在生产中使用其中任何一个吗?
问题二:这两个库中,您推荐哪个?任何使用过其中任何一个库的人的答案都很好,使用过两个库的人的答案更好!
最后,我的团队包括承包商和员工,他们在Java方面的水平从中到高不等(但具有多年非OO编程经验)。因此,我不想引入超过一个集合库,并且我希望选择一个对我的任何团队成员来说都不会太难使用的库。
谢谢!
编辑:我想要替换明确的循环,因为大量的样板代码掩盖和压倒了实际的业务代码。我有嵌套的循环调用带有嵌套的循环的函数,所有这些都是一行代码就能完成的事情。通过适当的介绍和培训,我认为我的团队会发现Collections/Transformer/Predicate方法更清晰、更快速、更易于编写和阅读。

3
相关链接:Commons Collections vs Google Collections。在我看来,仍然是相关的。还可以看看这部电影:链接 - BalusC
2
你是为了替换代码而替换代码,还是因为你现在使用的“for each”风格有所不足? - matt b
4
你这样做的原因是什么?它能为你的代码库增加什么价值?当然,代码看起来会更漂亮(对于你来说),但你必须培训开发人员理解新的库……而且你还需要承担转换的成本和处理由此产生的错误。 - Stephen C
2
@matt b - 我也是这么认为的...但像那样的开发人员确实存在。而我的原始观点仍然存在-什么是“价值主张”? - Stephen C
1
Guava在生产环境中是否被“普遍认为是安全的”?好吧,你可以检查一下Gmail是否正常运行。 :-) - Kevin Bourrillion
显示剩余6条评论
3个回答

4

我在生产中使用Google Collections从未遇到过问题。这让你希望Java有函数指针,但设计是经过深思熟虑的。即使是像Lists.newArrayList这样的小事情也成为了新建列表的标准方式。


让你希望Java有函数指针。Java 8,祈祷吧。 - Thilo
1
@Thilo:也许是Java 10。只是可能。 - Matt Ball
JDK7(现在应该是8)“包括一个新的包java.dyn,其中包含与Java平台中动态语言支持相关的类。包中的一个类是MethodHandle。方法句柄是一种简单的java.dyn.MethodHandle类型对象,它匿名地封装了对JVM方法的引用。方法句柄是可调用的,就像对方法的命名引用一样。” http://www.oracle.com/technetwork/issue-archive/2010/10-may/o30java-099612.html - Thilo
@Thilo:我非常确定MethodHandle和相关内容将会在JDK7中出现。但是在JDK8加入lambda表达式和方法引用之前,我不知道Java本身会有多少使用。最初,我认为它主要会用于JVM上的动态语言。 - ColinD

2
看起来你需要的不是一个集合库,而是一个以函数式方式处理现有集合的库。
我自己写了这样一个库,但它不是开源的(只在我们公司内部使用),而且可能设计得不太好。
一个具有相同目标的库似乎很有前途:lambdaj。我自己没有使用过它,但如果当时我知道 lambdaj 的存在,我可能就不会写我的库了。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接