在哪里可以找到比大番茄更好的基本谓词?

时间:2011-04-02 17:19:24

标签: java guava predicates

我正在使用番石榴库,并注意到一个非常有用的Predicate未定义 - “大于”。还有其他地方我应该寻找像这样的基本谓词,还是我注定要创建我自己的功能支持jar包含这样的东西,并将其导入我的所有项目?有没有理由他们不会包含这个,但会花时间去做一堆其他的谓词(在Predicates类中)?

4 个答案:

答案 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内容适用于任何ComparableContiguousSet需要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