这是我的对象
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"}]
我在网上找到了一些方法,并找到了这个
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 :(得分:0)
第一种方法会将List<T>
拆分为相同大小的较小列表。第二种方法将基于存储在列表元素中的字段的值将列表拆分为较小的列表。从您的方法中显示的结果,您正在寻找第二种方法,但有一些更改:
List<T>
改为List<List<T>>
而不是Map<Key, List<T>
。List<List<T>>
进行排序。您可以使用TreeMap
作为Map
实现来实现此目的。这将是您正在寻找的修改:
public static List<List<Phone>> splitByDateActive(List<Phone> phoneList) {
Map<String, List<Phone>> map =
new TreeMap<String, List<Phone>();
for (Phone phone : phoneList) {
List<Phone> list = map.get(phone.getDate_active());
if (list == null) {
list = new ArrayList<Phone>();
map.put(phone.getDate_active(), list);
}
list.add(phone);
}
List<List<Phone>> phoneListSplitted = new ArrayList<List<Phone>>();
for (List<Phone> phoneListVar : map.values()) {
phoneListSplitted.addAll(phoneListVar);
}
return phoneListSplitted;
}