簡體   English   中英

基於類別拆分arraylist的最佳方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM