2011-12-11 16 views
1

ArrayListから内部オブジェクトのクラス、クラスメンバ(Field)とその値を知っているところで、単一オブジェクトをどのようにフィルタリングできますか?リフレクション:内部フィールド値を持つオブジェクトを見つける

擬似コード:あなたはむしろFieldそのものよりも、フィールドにを渡す以外、あなたはフィールドを確認することができますので、ここで

class MyType { 
    public String TITLE; 
    public int ID; 
} 

ArrayList<MyType> myArray; // filled with data 

function findRowByColumnValue(ArrayList<T> array, Field column, Object compareValue){ 
    // list all members of "array" 
    // and compare the inner field "column" to "compareValue" 
} 

// called like this 
findRowByColumnValue(myArray, MyType.class.getField("ID"), 2); 

答えて

1

は、何をしたいん一般的な方法だとクラスの整列。 異なるクラスのインスタンスが混在するListを考えてみましょう。各クラスはMyClass(ただしサブクラスも可能です)。各クラスは与えられた列名に対して異なるFieldを使用できます。

static <T> List<T> findRowByColumnValue(List<T> array, String column, Object compareValue){ 
    List<T> hits= new ArrayList<T>(); 
    for (T element : array) { 
     if (element != null && compareValue.equals(
      element.getClass().getField(column).get(element)) 
      hits.add(element); 
    } 
    return hits; 
} 

あなたは、などの特定のクラスのフィールドをキャッシュすることで、最適化するかもしれないが、私は当初、パフォーマンスの問題に気づかないでしょうがない限り。

+0

ボヘミアンさん、ありがとうございました。あなたは私が考えていないことを明らかにしました。非常にいいです:-) –

+0

@MarekSebera注:私はちょうどエラーに気づき、それを修正しました: 'get(要素)'(not ... 'get(column)') – Bohemian

+0

通知ありがとう!うれしい私はそれを実装するのが遅い:) –

関連する問題