我有一个ArrayList,其中DataType是一个类:
class DataType {
String id;
String dType;
String description;
// setters and getters follow
}
使用给定的ArrayList<Datatype>
,我想创建子列表,这样每个子列表都具有dType
的相同值。即DataType
具有相同值的所有dType
对象应该位于一个子列表中,依此类推。
此外,所有子列表都将添加到创建的ArrayList<ArrayList<Datatype>>
。
有人可以为此建议最恰当的方法。
答案 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);