基于键值对HashMap的ArrayList进行排序

int*_*thi 4 java hashmap

我有一个HashMaps列表.每个HashMap由几个kay-value对组成,一切都以字符串形式出现.我将所有的hashmaps存储在arraylist中.现在我需要根据hashmap中的键对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",
}
Run Code Online (Sandbox Code Playgroud)

我将此数据存储在此结构中.

ArrayList<HashMap<String, String>> data_list = new ArrayList<HashMap<String, String>>();
Run Code Online (Sandbox Code Playgroud)

我有很多这样的项目清单.现在我需要根据hashmap中的productName,Price,storeName,productID字段对arraylist进行排序.

Sim*_*mon 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

}
Run Code Online (Sandbox Code Playgroud)

您的产品清单:

  List<Product> products;
Run Code Online (Sandbox Code Playgroud)

现在定义一个Comparator进行排序,每个字段需要排序一个.以下是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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,一个Collections排序接受比较器作为参数:

Collections.sort(products, new ProductProductIdComparator());
Run Code Online (Sandbox Code Playgroud)


Per*_*ion 5

类别类提供了在适当位置排序的列表,使用比较器的实用程序的方法.

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
    }
}
Run Code Online (Sandbox Code Playgroud)