Collection<T>.TrueForAll
具体的には、 /Exists
などと同様にきれいな表記を探しています。
各オブジェクトのメソッドの戻り値を検査するために foreach ループを作成しなければならないのは臭く感じられるので、より良い Java イディオムがあることを願っています。
Collection<T>.TrueForAll
具体的には、 /Exists
などと同様にきれいな表記を探しています。
各オブジェクトのメソッドの戻り値を検査するために foreach ループを作成しなければならないのは臭く感じられるので、より良い Java イディオムがあることを願っています。
述語はGoogleコレクションライブラリで提供されます。
関数型Javaは、ファーストクラスの関数を提供します。述語はとして表され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
}
}
私の知る限りではありません。しかし、ApacheCommonsCollectionsには次のようなものがあります。Predicate
編集:そうです、コメントに記載されているように、Commons Collectionsはジェネリック以前の世界からのものであるため、Google Collections(更新:Guava)は明らかに優れたオプションのようです。それでも、Commons Collectionsは、これを行う有名なライブラリであり、人々がそれを使用しない理由を知っているので、言及する価値があります。:)
私は主な開発者とのこの素晴らしいインタビューでGoogleコレクションについてもっと読んでいて、「GoogleコレクションとApacheCommonsコレクション」の問題を具体的に扱っていることを少し引用したいと思いました。
あなたのアプローチのユニークな点は何ですか?たとえば、Apache Commons Collectionとどのように違いますか?
Kevin:「まあ、Apache Commonsを神に感謝します。このようなライブラリがなければ、私たちは皆悪い状態になります。それでも、残念ながら、その特定のプロジェクトは、ジェネリック以前の世界で行き詰まっています。彼らはジェネリックを採用したいと思っていますが、彼らは、これにはかなり重要で互換性のない書き換えが含まれることを認識しています。これまでのところ、このような取り組みを積極的に推進している人はいないようです。Googleでは、2005年の春から全社的にJava5を使用しています。コレクションライブラリはジェネリック化されていません。コンパイラーの警告を受け取るのが本当に嫌いなので、私たちにとっては大きな問題でした。また、Apacheコレクションが実装するJDKインターフェースの仕様に準拠していない多くの場所についても心配していました。」
[...]
Jared:「Kevinが示唆しているように、私たちのライブラリは、JDKの外で、ジェネリック、列挙型、共変リターン型などのJava 5機能で構築された唯一のコレクションライブラリです。Java5コードを作成するときは、次のようなコレクションライブラリが必要です。言語を最大限に活用します。さらに、ライブラリを完全で堅牢なJDKコレクションクラスとの整合性を保つために多大な努力を払いました。コレクションクラスは当初ははるかに制限されていましたが、最後の2つで徐々に改善されてきました。すべてのライブラリの使用はGoogleのソース制御システムで行われるため、パブリックインターフェイスを柔軟に変更できます。ApacheCommonsCollectionのようなオープンソースプロジェクトには、最初のリリース後に動作を変更する自由がありません。 'Googleコレクションライブラリ1.0がリリースされると、その柔軟性が失われます。問題を解決できるように、今すぐフィードバックを受け取りたいと考えています。」