我正在使用 guava 库并注意到没有定义一个非常有用的谓词- “大于”。是否还有其他地方我应该寻找这样的基本谓词,或者我注定要创建自己的功能支持 jar,其中包含此类内容,并将其导入我的所有项目中?他们是否有理由不包括这个,但会花时间做一堆其他谓词(在谓词类中)?
4 回答
Range和Ranges(更新:从 Guava 14.0 开始,静态方法Ranges
已被折叠Range
)现在已为 r10 添加。你将能够做到:
Iterable<Integer> positive = Iterables.filter(numbers, Range.greaterThan(0));
Range
s 具有许多其他强大的功能,包括将 aRange
视为ImmutableSortedSet
离散域上的连续的能力:
ContiguousSet<Integer> oneToOneHundred = ContiguousSet.create(
Range.closed(1, 100), DiscreteDomains.integers());
我只是Integer
在这里展示了 s,但这些Range
东西适用于任何Comparable
. ContiguousSet
需要一个DiscreteDomain类型... Guava 提供DiscreteDomain.integers()
,.longs()
并且.bigIntegers()
目前。
借助Predicate
接口和各种实用方法来使用 Predicate 过滤集合,Guava 提供了一个可以构建的核心。
该类Predicates
允许您创建一些常用谓词。我想您可以按照 Mike 的建议请求在问题跟踪器中进行增强,但我不确定他们是否会添加它,因为 Guava 力求实现高功率重量比。
如果他们要添加“greaterThan”谓词,他们还需要添加“greaterOrEqualThan”、“lesserThan”、“lesserOrEqualThan”......这会很有用,但对于一个谓词来说,这是很多“API 膨胀”只需一行即可实现。不过值得一试。
更好的解决方案可能是拥有一个开源项目,该项目使用 Guava 中不可用的所有“不错的”功能扩展 Guava。我们可以称它为“guava-leftovers”之类的东西;)或者也许要求Biscotti项目添加这样的实用方法(它们已经有一些 Guava 中没有的“不错的”功能)。
Predicates
收集一些常见的谓词,但不大于一个。我不认为番石榴提供了这样的东西。您可以尝试在 guava 项目站点提交错误/功能请求:http ://code.google.com/p/guava-libraries/issues/list