java - 如何根据对象属性将列表对象生成为多个列表?

标签 java android

这是我的对象

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);
}

但是这种方式只返回一个列表,我需要返回多个在根列表上具有相同属性的列表。

有人可以帮我吗?

最佳答案

第一种方法将分割 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;
}

关于java - 如何根据对象属性将列表对象生成为多个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26667785/

相关文章:

android - getSupportActionBar() 方法 getSupportActionBar() 未为 TaskActivity 类型定义。为什么?

android - 不推荐使用 OnCameraChangeListener()

java - 无法将上面的一些 ascii 值写入 java 中的文件

java - Ant 和可用任务——如果某些东西不可用怎么办?

java - 在 Windows XP 中停止 Java 进程的策略

java - Android - 抽屉布局 - 关闭抽屉导致空指针异常

javascript - Apache Cordova : Build failed Error code 1 and Javascript Exception

java - 删除数据库条目后刷新 ListView

java - JTable 单元格编辑器十进制阈值

Java Swing - 禁用 JCheckbox 时出现问题