2011-12-11 39 views
1

我們如何從ArrayList中篩選出單個對象,我們知道內部類型類,類成員(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

這裏有一個通用的方法,你想要做什麼,除非你在現場通過,而不是Field本身,因爲這樣你可以確確實實地和類對齊。考慮一個列表,其中包含不同類的實例,每個類都有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(element)'(不是'... get(column)') – Bohemian

+0

感謝您的注意!很高興我在執行它很慢:) –

相關問題