使用Google Guavas Predicates将过滤方法与类分离是一个很好的设计

时间:2013-06-03 04:33:22

标签: java guava predicate software-design open-closed-principle

今天我在我的博客中写了以下article,关于如何使用Google Guavas Predicates来提高设计的可扩展性。这让我问自己以下问题:“这个解决方案需要更深层次的设计缺陷吗?”是否有另一种“更清洁”的方式来实现这种可扩展性?我只是在想这个问题吗?

1 个答案:

答案 0 :(得分:4)

Google Guava向Java添加了一些应该但不存在的东西(很多都包含在v7中)。

IMO番石榴往往非常干净和快速。将Guava的ComparisonChain与(例如)Apache Commons CompareToBuilder类进行比较。两者基本上都是一样的。虽然Apache非常简单易用,新手可以理解,但是Guava是更快/更清洁/更少资源(更好?)的方法。

Predicate而言,它们提供了一个功能,并且它们做得很好,特别是当你将它与所有其他番石榴的东西结合起来时,如Iterators.filter

在使用番石榴工具之前,需要先了解它们。例如,如果您要多次遍历已过滤的列表并且Predicate具有不可忽略的成本(CPU /内存/时间),那么您最好循环一次并存储值首先在Collection中,因为其中一些方法只是将给定的Iterable包装到next()函数只在未过滤的next()上调用Iterable的类中,直到它为止找到一个传递过滤器并返回过滤器的条目。

所以,是的,番石榴非常有用。包括PredicateIterables以及Collections2过滤等等。但是,了解发生了什么事情以及您可能需要处理的问题或性能影响总是有帮助的你发现你的代码需要优化。