簡體   English   中英

基於鍵值對HashMap的ArrayList進行排序

[英]Sorting ArrayList of HashMap based on key value

我有一個HashMaps列表。 每個HashMap都包含幾個kay值對,並且所有內容都以字符串形式出現。 我將所有哈希圖存儲在arraylist中。 現在,我需要根據哈希圖中的鍵對arraylist進行排序。

這是我的示例數據:

{
 "productID":"5643",
 "productName":"Apple - iPod touch",
 "outsidePrice":"189.99", 
 "merchantID":"134439",
 "ourPrice":"184.99", 
 "storeName":"Ebay",
}


{
 "productID":"3243",
 "productName":"Apple - iPad",
 "outsidePrice":"389.99", 
 "merchantID":"54439",
 "ourPrice":"384.99", 
 "storeName":"Apple",
}

我將數據存儲在此結構中。

ArrayList<HashMap<String, String>> data_list = new ArrayList<HashMap<String, String>>();

我有很多這樣的物品清單。 現在,我需要根據哈希圖中的productName,Price,storeName,productID字段對arraylist進行排序。

我建議您使用自定義產品類為您執行此操作。 最終,恕我直言,它將使您的代碼更易於維護和更強大。

這個怎么樣?

代表您的數據的類:

class Product{

     public string productId;
     public string productName;
     public BigDecimal outsidePrice;
     public int merchantId;
     public BigDecimal ourPrice;
     public string storeName;

// whatever constuctors you need

}

您的產品清單:

  List<Product> products;

現在定義一個要排序的比較器 ,每個要排序的字段都一個。 這是productId的示例。

public class ProductProductIdComparator implements Comparator<Product>{

     @Override
     public int compare(Product product1, Product product2) {

        if (product1.productId > product2.productId){
            return +1;
        }else if (product1.productId < product2.productId){
            return -1;
        }else{
            return 0;
        }
    }
}

最后,一個Collections排序接受一個比較器作為參數:

Collections.sort(products, new ProductProductIdComparator());

Collections類提供了一種實用方法,用於使用Comparator對列表進行排序。

final List<Map<String, String>> dataList = new ArrayList<HashMap<String, String>>(4);
Collections.sort(dataList, new Comparator<Map<String, String>>() {
    @Override
    public int compare(final Map<String, String> map1, final Map<String, String> map2) {
        // Get fields from maps, compare
    }
}

您可以使用arrays.sort()來簡短地實現此目的,但會花費一些內存。

HashMap[] result = Arrays.sort(list.toArray(), new Comparator() {
  public void compare(Object o1, Object o2) {
    HashMap<String, String> a = (HashMap<String, String>)o1;
    HashMap<String, String> b = (HashMap<String, String>)o2;
    // return value as per contract of Comparator.compare() doing whatever comparisons you need.
  }

  public boolean equals(Object obj) { return this == obj; }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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