具体的には、私は.NETのPredicate <T>メソッドに相当するJava 1.5がありますか?
など、Collection<T>.TrueForAll
/Exists
と同様にクリーンな表記法を探していますこれは、各オブジェクトのメソッドの戻り値を検査するforeachループを記述する必要がする臭い感じなので、私は願っていますそれに対してより良いJavaイディオムがあります。
具体的には、私は.NETのPredicate <T>メソッドに相当するJava 1.5がありますか?
など、Collection<T>.TrueForAll
/Exists
と同様にクリーンな表記法を探していますこれは、各オブジェクトのメソッドの戻り値を検査するforeachループを記述する必要がする臭い感じなので、私は願っていますそれに対してより良いJavaイディオムがあります。
Predicatesは、Google Collectionsライブラリに提供されています。
私が知る限り、いいえ。 Predicate
編集:しかし、ApacheのCommons Collectionsはこのような何かを持っているコメントで述べたように右、コモンズコレクションは、事前にジェネリック医薬品の世界からですので、Google Collections(更新:Guavaは)のように思えます明らかに良いオプションです。それでも、Commons Collectionsはこれを行うよく知られた図書館であり、人々がを知っている理由として、を使用しないように言及する必要があります。 :)
私はちょうどその主な開発者とこのnice interviewにGoogleのコレクションについての詳細を読んで、そして問題の「Apache Commonsのコレクション対Googleのコレクション」と特異的に扱うビットを引用したかった:
あなたのアプローチはユニークですか? たとえば、Apache Commons Collectionの とどのように違いますか?
ケビン:「まあ、Apacheの Commonsのために神に感謝私たちは、すべてこのようなライブラリせずに悪い形 になるだろう は事前ジェネリック医薬品の世界では、失速した その特定のプロジェクト悲しいことに、言いました。 。 彼らはジェネリックを採用したいが、彼らはこれが かなり自明でないと互換性のない 書き換えを伴うだろうことを認識 ん。これまでのところ、誰もが積極的な努力を駆動 であるように思わない。 Googleでは、Javaを使用してきました5 2005年春より コレクションライブラリコンパイルの警告を受け取ることが本当に嫌なので、私たちは 私たちの取引を破りました。私はまた、Apacheのコレクションが は、彼らが実装 JDKインタフェースの仕様に準拠していません の多くの場所について 心配だった「
[...]
ジャレド:」。ケビンとしては、 Java 5の コードを書くとき、あなたはコレクションライブラリ をしたいジェネリック、列挙型、共変 戻り値の型、など:私たちの図書館 はJDKの外に、Java 5ので 機能を内蔵し、私はの を知っている唯一のコレクションライブラリである、暗示を最大限に活用する言語。さらに、 という膨大な数のライブラリを という完全なものにして、堅牢で、 のJDKコレクションクラスと一貫しています。私たちの コレクションクラスは最初は に制限されましたが、徐々に が改善されています。 ライブラリの使用方法はすべてGoogleの ソース管理システムにありますので、 のインターフェースを変更するには、 の柔軟性がありました。 Apache Commons Collectionのようなオープンソースプロジェクト では、 には、最初のリリース後にその の動作を自由に変更することはできません。私たちはその柔軟性を失うことになるので が一度 Googleのコレクションライブラリ1.0がリリースさ で、我々は今、私たちは物事が 権利を取得することができます フィードバックを受け取ることを熱望している。」
コモンズコレクション一般的なサポートが欠けています。 – erickson
Functional Javaは、ファーストクラスの機能を提供します。A述語はF<T, Boolean>
のように表現される例えば、ここではすべて小文字である文字列の存在のための配列をテストするプログラムだ
import fj.F;
import fj.data.Array;
import static fj.data.Array.array;
import static fj.function.Strings.matches;
public final class List_exists {
public static void main(final String[] args) {
final Array<String> a = array("Hello", "There", "how", "ARE", "yOU?");
final boolean b = a.exists(matches.f("^[a-z]*$"));
System.out.println(b); // true
}
}
注:。。*のJava 1.8ではなく、Javaの1.5であることがあります* – Daniel