As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center提供指导。




7年前关闭。




今天,我在博客中写了以下article,说明如何使用Google Guavas谓词来提高设计的可扩展性。这使我问自己以下问题:“是否需要由更深的设计缺陷引起的此解决方案?”。是否有另一种“更清洁”的方式来实现这种可扩展性?我只是在考虑这个问题吗?

最佳答案

Google Guava向Java添加了一些本来应该存在但没有的东西(其中许多都包含在v7中)。

IMO Guava往往非常干净和快速。将Guava的 ComparisonChain 与(例如)Apache Commons的CompareToBuilder类进行比较。两者基本上都做同样的事情。尽管Apache的方法非常简单,容易让新手理解,但是Guava的方法是更快/更清洁/资源更少的(更好?)方法。

Predicate而言,它们提供了一个功能,而且效果很好,特别是当您将其与所有其他Guava东西(例如 Iterators.filter )结合使用时。

不过,在使用Guava工具之前确实需要了解它们。例如,如果您要循环遍历过滤后的列表,而Predicate的费用(CPU /内存/时间)不可忽略,那么最好循环遍历一次,然后将值首先存储在Collection中,因为其中一些方法只是将给定的Iterable包装到一个类中,该类的next()函数仅对未过滤的next()调用Iterable,直到找到一个通过过滤器的条目并将其返回。

所以,是的,番石榴非常有用。包括PredicateIterables以及Collections2过滤等。但是,如果发现代码需要优化,它总是有助于了解幕后情况以及可能需要处理的陷阱或性能问题。

10-07 16:22
查看更多