私は guava ライブラリを使用していますが、非常に便利なPredicateが定義されていないことに気付きました - 「より大きい」。このような基本的な述語を探す必要がある別の場所はありますか?それとも、このようなものを含む独自の機能サポート jar を作成し、それをすべてのプロジェクトにインポートする運命にありますか? 彼らがこれを含めない理由はありますが、他の多くの述語を実行するのに時間がかかります(述語クラスで)?
4 に答える
RangeとRanges (更新: の静的メソッドは Guava 14.0 の時点でRanges
組み込まれていますRange
) が 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
ここで sを示しましたが、これはRange
任意のComparable
. タイプにDiscreteDomainContiguousSet
が必要です... Guava は、とを提供しています。DiscreteDomain.integers()
.longs()
.bigIntegers()
述語を使用してコレクションをフィルタリングするためのPredicate
インターフェースとさまざまなユーティリティメソッドを備えたGuavaは、その上に構築できるコアを提供します。
このPredicates
クラスでは、一般的に使用される述語をいくつか作成できます。Mikeが提案したように、Issue Trackerで拡張をリクエストできると思いますが、Guavaは高いパワーウェイトレシオを目指しているため、追加されるかどうかはわかりません。
「greaterThan」述語を追加する場合は、「greaterOrEqualThan」、「lesserThan」、「lesserOrEqualThan」も追加する必要があります...これは便利ですが、これは述語の多くの「API膨張」です。実装には1行しかかかりません。ただし、試してみる価値はあります。
より良い解決策は、Guavaでは利用できないすべての「便利な」機能を備えたGuavaを拡張するオープンソースプロジェクトを用意することです。これを「guava-leftovers」などと呼ぶこともできます;)または、Biscottiプロジェクトにそのようなユーティリティメソッドを追加するように依頼することもできます(Guavaにはない「便利な」機能がすでにいくつかあります)。
以前にこの機能をリクエストし、この問題について言及されました。どうやら、この機能は Ranges を介して実装され、実装されPredicate
ます。
Predicates
いくつかの一般的な述語を収集しますが、1 つより大きくはありません。グアバがそのようなものを提供するとは思いません。guava プロジェクト サイトでバグ/機能リクエストを提出してみてください: http://code.google.com/p/guava-libraries/issues/list