[英]Best way to split an arraylist based on a category
我有一個ArrayList,其中DataType是一個類:
class DataType {
String id;
String dType;
String description;
// setters and getters follow
}
使用給定的ArrayList<Datatype>
,我想創建子列表,以便每個子列表具有相同的dType
值。 即,具有相同dType
值的所有DataType
對象應該位於一個子列表中,依此類推。
此外,所有子列表都將添加到創建的ArrayList<ArrayList<Datatype>>
中。
有人可以為此建議最合適的方法。
我這樣做的方法是創建一個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);
}
現在你把它們全部整理好了。
我會創建一個哈希映射: HashMap<DataType, List<Data>>
。 確保為DataType
類重寫equals()
和hashCode()
。
一種選擇是通過手動迭代HashMap<String, List<DataType>>
來創建HashMap<String, List<DataType>>
。 除此之外,如果您可以使用第三方庫,那么請考慮使用Guava的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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.