java - 如何对包含值映射的映射进行排序

标签 java sorting hashmap

我的数据结构如下:

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

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

我需要排序的 map 是: Map<String, SKUPriceVo> myMap 按照 PriceVo 对象中的价格排序,即> myMap 应该根据 PriceVo 中的价格将 SKUPriceVo 按升序或降序排列。

最佳答案

您不能直接对 HashMap 进行排序。您需要做的是将 map 数据移动到列表并根据价格对该列表进行排序。

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 并直接向其传递 Comparator 并排序,因此无需复制其他列表中的数据。

关于java - 如何对包含值映射的映射进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50828927/

相关文章:

Java 排序日期字段

java - 如何对@ManyToMany关系中的相关实体进行排序

java - 度假村ArrayList的HashMaps的一个简单方法

java - 使用并发删除维护名称的唯一对象

c++ - gnu C++ hash_map : erasing a key: defined?

java - 如何反序列化当前对象

java - 在 fragment 中单击按钮时 SetOnClickListener 不起作用

java - Java线程池任务执行队列

java - Dagger 2 场注入(inject)在 Android 中不起作用

c# - 如何对 KeyedCollection<TKey, TItem> 进行排序?