java - 使用 Google Guavas Predicates 将过滤方法与类解耦是否是一个好的设计

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

<分区>

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

最佳答案

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

IMO Guava 往往非常干净和快速。比较 Guava 的 ComparisonChain与(例如)Apache Commons CompareToBuilder 类。两者本质上做同样的事情。虽然 Apache 非常简单易懂,新手也很容易理解,但 Guava 是更快/更清洁/资源密集度更低(更好?)的方法。

Predicate 而言,它们提供一个功能并且做得很好,尤其是当您将它与所有其他 Guava 东西(如 Iterators.filter)结合使用时.

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

所以,是的,Guava 非常有用。包括 PredicateIterablesCollections2 过滤等。但是,了解幕后发生的事情以及陷阱或问题总是有帮助的如果您发现您的代码需要优化,您可能需要处理性能影响。

关于java - 使用 Google Guavas Predicates 将过滤方法与类解耦是否是一个好的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16890046/

相关文章:

java - 在Android中向SD卡写入文件

java - 使用 Lucene 索引文本文档时出现异常,使用 SnowballAnalyzer 进行清理

lambda - Kotlin lambda 和类型推断

java - 将一个集合分成更小的集合 - Java

scala - 如何在 Scala 中实现速率限制器?

predicate - 理解 find_if 谓词

ios - 如何从cloudkit下载多条记录

java - 替换所有空格分隔的字符串

java - Log4j2 突出显示模式在文本编辑器中不起作用?

java - 我使用 Guava 的不可变集合(为 Java 6 编译)和 Java 8 JRE,我可以使用新的流接口(interface)吗?