2013-03-21 28 views
1

我有一個包含對象的ArrayList,這些對象有多個值。將ArrayList <Object>拆分爲多個,取決於對象中的int值

現在我想將這個列表分成多個列表,取決於對象中的一個int值。

因此,如果例如:

2對象有一個int值爲1
3對象有一個int與值3

所以該ArrayList有5個對象,我想獲得:

2周的ArrayLists,1與第一對象的連接1與第二對象(多個,如果有多個不同的INT的值)

很抱歉,如果它是混亂..

回答

7

首先創建這樣一個緩存:Map<Integer, List<YourObjectType>>

然後通過每個對象的週期,並使用你的整數訪問上述Map,如果該值爲空,創建一個新的List並把它放在Map,然後將您的對象添加到List

最終結果將是一個帶有兩個條目的映射,每個條目都包含一個條目列表,其中包含來自您的對象的整數作爲鑑別器。

下面的代碼:

Map<Integer, List<YourObject>> cache = new HashMap<Integer, List<YourObject>>(); 
for (YourObject yo : yourObjectListArrayWhatever) { 
    List<YourObject> list = cache.get(yo.getIntegerValue()); 
    if (list == null) { 
    list = new ArrayList<YourObject>(); 
    cache.put(yo.getIntegerValue(), list); 
    } 
    list.add(yo); 
} 
+0

這樣做的訣竅:) – Luc 2013-03-21 12:46:26

0

你如何存儲對象的int值?我確定你有一個派生自Object的實現,在這種情況下,你應該在層次結構的較低點使用generecity。

假設你有一類人用一個int值,然後子類人伸出Person和女人伸出人,你填入此ArrayList與男性和女性,你會做這樣像這樣:

List<Person> pList = new ArrayList<Person>(); 

現在,在你的Person類中你應該有一個int值的get方法。例如,如果int值是人的年齡:

public int getAge() { return age; } 

然後,終於回答你的問題我會去像這樣:

List<Person> firstList = new ArrayList<Person>(); 
List<Person> secondList = new ArrayList<Person>(); 
for (Person person:pList) { 
    if (person.getAge()==1) { 
     firstList.add(person); 
    } 
    else if (person.getAge()==3) { 
     secondList.add(person); 
    } 
}//for 

我希望我充分地回答你的問題。

+0

int值是可變的,從未知道前期 – Luc 2013-03-21 12:49:09