2014-10-31 101 views
1

這是我的目標如何基於對象屬性將列表對象生成多個列表?

public static class Phone{ 
    public String model; 
    public String imei; 
    public String date_active; 

} 

這是我的列表對象例如

Phone a = new Phone ("Qs17", "1122", "20/10/2014"); 
Phone b = new Phone ("Qs18", "4345", "20/10/2014"); 
Phone c = new Phone ("Qs19", "3451", "21/10/2014"); 
Phone d = new Phone ("Qs20", "6756", "22/10/2014"); 
Phone e = new Phone ("Qs17", "1257", "22/10/2014"); 
Phone f = new Phone ("Qs17", "9077", "22/10/2014"); 

list.add(a); 
list.add(b); 
list.add(c); 
list.add(d); 
list.add(e); 
list.add(f); 

我希望我的列表拆分到具有相同的日期一些多單。 例子:

list1 = [{"QS17","1122","20/10/2014"}, {"QS18","4345","20/10/2014"}] 
list2 = [{"QS19","3451","21/10/2014"}] 
list3 = [{"QS20","6756","22/10/2014"}, {"QS17","1257","22/10/2014"}, {"QS17","9077","22/10/2014"}] 

我SEACH對網絡的一些方式,發現這

static <T> List<List<T>> chopped(List<T> list, final int L) { 
List<List<T>> parts = new ArrayList<List<T>>(); 
final int N = list.size(); 
for (int i = 0; i < N; i += L) { 
    parts.add(new ArrayList<T>(
     list.subList(i, Math.min(N, i + L))) 
    ); 
} 
return parts; 

}

但它似乎取決於特定數量的子列表,對對象的屬性不基地。

我還搜索找到了另一種方式,發現這

Map<YourSplitterProperty, List<YourItem>> map = new HashMap<YourSplitterProperty, List<YourItem>(); 
for (YourItem item : yourItems) { 
    List<YourItem> list = map.get(item.getSplitterProperty()); 
    if (list == null) { 
    list = new ArrayList<YourItem>(); 
    map.put(item.getSplitterProperty(), list); 
    } 
    list.add(item); 
} 

但是這種方式只返回一個列表,我需要返回其有根名單上的同一屬性的多個列表。

有人可以幫我嗎?

+0

Nuong,你的問題還不太清楚,請你澄清一下。 – 2014-10-31 05:08:40

+0

@Luiggi門多薩,我想將我的列表分割成多個列表,它們具有相同的date_active – CauCuKien 2014-10-31 05:09:34

+0

@pratt如何通過'Phone'類的特定屬性從列表'中*做一類* group。 – 2014-10-31 05:09:59

回答

0

第一種方法會將List<T>拆分成相同大小的較小列表。第二種方法將根據存儲在列表元素中的字段的值將列表拆分爲更小的列表。從你的方法所示的結果,你正在尋找的第二個方法,但有一些變化:

  • 返回List<T>List<List<T>>,而不是Map<Key, List<T>
  • 返回的List<List<T>>也應該排序。

您可以通過使用TreeMap作爲Map實現來實現此目的。這將是您正在尋找的修改:

​​
+0

親愛的@Luiggi,有錯誤的方法getValues()和方法.addAll(phoneListVar) – CauCuKien 2014-10-31 05:16:49

+0

@NuongReo我不好。我修復了代碼中的錯字。 – 2014-10-31 05:27:28

+0

它工作非常好,只需要添加addAll即可。你的答案是解決方案。非常感謝。 – CauCuKien 2014-10-31 06:45:23