如何对包含值映射的地图进行排序

时间:2018-06-13 04:06:34

标签: java sorting hashmap

我的数据结构如下:

class SKUPriceVO {
    String skuId;
    Map<String, PriceVo> priceMap;
}

class PriceVo {
    String type;
    String skuId;
    double price;
}

我需要排序的地图是: Map<String, SKUPriceVo> myMap以其根据PriceVo对象中的价格排序的方式,即&gt; myMap应该根据PriceVo中的价格按升序或降序排列SKUPriceVo。

1 个答案:

答案 0 :(得分:1)

您无法直接对hashmap进行排序。您需要做的是将地图数据移动到列表中,并根据价格对该列表进行排序。

List<Map.Entry<Integer, PriceVo >> list = new ArrayList<Map.Entry<Integer, PriceVo >>(map.entrySet());

Collections.sort(list, new Comparator<Map.Entry<Integer, PriceVo >>() {
        @Override
        public int compare(Map.Entry<Integer, PriceVo > price1,
                           Map.Entry<Integer, PriceVo > price2) {
            return price1.getValue().price.compareTo(price2.getValue().price);
        }
    }
);

您甚至可以使用Treemap并直接将比较器传递给它并进行排序,因此不需要复制其他列表中的数据。