基于类别拆分arraylist的最佳方法

时间:2013-12-15 17:41:38

标签: java arraylist

我有一个ArrayList,其中DataType是一个类:

class DataType {
  String id;
  String dType;
  String description;
  // setters and getters follow
}

使用给定的ArrayList<Datatype>,我想创建子列表,这样每个子列表都具有dType的相同值。即DataType具有相同值的所有dType对象应该位于一个子列表中,依此类推。

此外,所有子列表都将添加到创建的ArrayList<ArrayList<Datatype>>

有人可以为此建议最恰当的方法。

3 个答案:

答案 0 :(得分:4)

我这样做的方法是创建一个Map:

Map<String, List<DataType>> data;

然后循环遍历原始数组,对于每个值,使用dType作为键将它们插入到Map中。

for (DataType dt: toSort) {
    List<DataType> list = data.get(dt.dType);
    if (list == null) {
        list = new ArrayList<>();
        data.put(dt.dType, list);
    }
    list.add(dt);
}

现在你把它们排列得很好。

答案 1 :(得分:0)

我会创建一个哈希映射:HashMap<DataType, List<Data>>。请务必覆盖equals()课程的hashCode()DataType

答案 2 :(得分:0)

一种选择是通过手动迭代列表来创建HashMap<String, List<DataType>>。除此之外,如果您可以使用第三方库,请考虑使用Guava's Multimaps.index方法:

Function<DataType, String> groupFunction = new Function<DataType, String>() {
        @Override
        public String apply(DataType dataType) {
            return dataType.getDType();
        }
};

ImmutableListMultimap<String, DataType> grouped = Multimaps.index(persons, groupFunction);

System.out.println(grouped);