4

HashMapのリストがあります。各HashMapは、いくつかのkay-valueペアで構成され、すべてが文字列として提供されます。すべてのハッシュマップを配列リスト内に保存しています。次に、ハッシュマップ内のキーに基づいて配列リストを並べ替える必要があります。

これが私のサンプルデータです:

{
 "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フィールドに基づいて配列リストを並べ替える必要があります。

4

3 に答える 3

7

これを行うには、カスタム製品クラスを使用することをお勧めします。最終的には、コードの保守が容易になり、より堅牢になります。

これはどう?

データを表すクラス:

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;

次に、ソートする必要のあるフィールドごとに1つずつ、ソートするコンパレータを定義します。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.sort(products, new ProductProductIdComparator());
于 2012-11-25T07:48:46.497 に答える
6

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
    }
}
于 2012-11-25T07:37:55.707 に答える
-1

array.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; }
});
于 2012-11-25T07:28:58.847 に答える