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