2013-03-27 109 views
-3

我有一個對象數組的列表....每個數組都有4個對象。檢查列表是否包含相同的數據

我需要讀取完整列表並將所有在元素[1]中具有相同值的數組放在單獨的列表中。

怎麼辦?

例如我有一個列表「數據」

具有像

array[0] 
array[1] 
array[2] 
⋮ 
array[n] 

對象的數組的第n號的每個陣列具有4個值

array[0] has 0,23,BD,100 
array[1] has 1,23,FG,200 
array[2] has 3,34,GH,400 
array[3] has 8,87,UJ,600 
⋮ 
array[n] has 98,23,KM,9000 

現在我需要把array[0], array[1] and array[n] in同list(List1)因爲它們全都具有相同的值'element 2' i-e '23'

array[2]分別在單獨的list(List2)array[3]之間list(List3),因爲沒有其他數組具有與它們相似的「元素2」。

所有數組都是對象類型。

+0

爲什麼不使用像'ArrayList'或其他任何其他Java實用類? – 2013-03-27 17:35:22

+0

我不知道這裏的問題是什麼,一個非常糟糕的方式來做到這一點,從列表中取出一個對象,然後遍歷列表比較值與您取出的值,然後將該對象添加到記者名單,並重復,直到原來的清單是空的 – jsedano 2013-03-27 17:37:44

+0

Vishal我不知道,我從來沒有使用過列表。 – 2013-03-27 17:42:36

回答

1

我想你會得到這樣的值,因爲你從一個或多個表中選擇了屬性的一個子集。事實上,你最終會得到一個Object類型的數組列表。這是因爲每個屬性都有其自己的類型,所以可以處理這種未定義情況的公共超類型本身就是Object

您可以在這裏採取兩種方法。一個需要增強與數據庫的交互,另一個將用另外的處理來代替這個查詢調優,以準備你剛剛檢索的數據。

選項1:參數化查詢遠一點

添加另一個條件查詢,這裏定義第二屬性(element 2因爲你把它命名爲)。隨後的查詢都會有這樣的額外條件:

AND element2 = :element2 

這樣,您就可以判斷element 2查詢數據時,直接獲取相關數據的每個子集。這種方法需要先了解您想要檢索的值以及查詢的值。

的值可以用一個簡單的查詢檢索:

SELECT DISTINCT(element2) FROM <YOUR_TABLES_HERE> 

每次執行查詢時,你還是會得到一個Object[]List這個時候,他們都會有相同的值element 2

選項2:過程中,你只得到

數據如果更改查詢不是一個選項(或者以任何理由有沒有knowhing不同值的簡單方式element 2可以),你將有處理剛剛從數據庫中獲得的原始數據。

我建議您將MapList s混合。假設element 2位於您的數組的索引1下,你必須遍歷該列表,檢查值,並將其添加到地圖:

Map<Long, List<Object[]>> queriedResultsMap = new HashMap<Long,List<Object[]>>(); 
//Iterate over the obtaines database values 
for(Object[] currentArray : yourListOfObject) { 
    if(!queriedResultsMap.containsKey(currentArray[1])) { 
     //No element with that value for "element 2" is on the map yet, 
     //so a new container (List) is created. 
     queriedResultsMap.put(currentArray[1],new ArrayList<Object[]>()); 
    } 
    //Adds the element to the associated list. 
    queriedResultsMap.get(currentArray[1]).add(currentArray); 
} 

這一段簡單的代碼遍歷當前的列表數組並將它們中的每一個添加到與地圖的關鍵字element 2的valye關聯的列表中。在此映射中,密鑰值爲element 2,關聯的值爲List,其中包含所有找到的註冊表,其中對應的值爲element 2

if語句會在您每遇到element 2的新值並創建一個新列表並將其與該值相關聯時創建一個新列表。

最後,使用這些數據,你只是這樣做:

queriedResultsMap.get(element2Value); 

element2Value包含的價值,你想要得到的結果。地圖返回的列表包含具有特定值element 2的所有結果。如果沒有返回列表(get方法返回null),那麼您知道剛剛運行的查詢沒有返回該值爲element 2的結果。

該地圖允許element 2的每個找到的值之間的直接關聯,也讓您直接瞭解所有獲得的值,同時讓您有機會立即檢查是否檢索到特定值。要準確知道element 2的哪個值,只需獲取地圖的keySet,並知道是否檢索到給定值,請使用MapcontainsKey方法。

使用任何一種最適合您的方法。

相關問題