2011-12-13 8 views
1

いくつかの要素を持つリストがあり、特定の条件を満たさないすべての要素を選択したいとします。私はこのような何かを考えていた:1組の要素の中から条件を満たすすべての要素を選択します。

public void choose(Condition c) { 
    choose all elements that satisfy c.CheckCondition(elem) 
} 

しかし、私はそれが非常にunelegantだと思うし、それが 要素が条件を満たしているかどうかをチェックします特定の機能をConditionオブジェクトを実装するために、ユーザーに強制します。 C++の場合は、関数へのポインタをパラメータとして送信しますが、javaでは使用できません。 私はComparableオブジェクトを使用することを考えましたが、私はそれをユーザーから取得するのではなく、クラスで実装する必要があります。

この問題の他の優雅なアイデアですか?

ありがとうございました!

+0

がhttp://stackoverflow.com/questions/122105/java-what-is-theを参照してください。 -best-way-to-filter-a-collection。 –

答えて

0

私は、ジェネリックと匿名クラスと組み合わせる場合は特に、何を提案することはかなりエレガントだと思う:

set.choose(new Condition<Elem>() { 
    boolean checkCondition(Elem elem) { 
    ... 
    } 
}); 
2

- Java 7には依然としてクロージャ(Cでは "関数ポインタ")がありません。それはJava 8で来るかもしれません。その間に、私たちはクラスとして述語を書くことに固執しています...

Guavaライブラリに興味があります。 Googleによって開発されたもので、既にコレクションの要素をフィルタリング、マップ、または変換するためのクラスを提供しています。 http://code.google.com/p/guava-libraries/

関連する問題