java 将map中的key或value进行排序
一个项目业务场景,需要根据关键词查询商品信息,因为分表分的很细,价格信息、关键词信息、商品基本信息都分开存储,因此在经过关键词查询到商品之后,在查询出来的结果中想要商品按照升序或者降序的顺序显示,这里采用的解决方案是:先通过关键词把商品编号和商品对应的价格查询出来组合成为一个key-value的map集合(key-商品编号,value-商品价格),然后将这个map进行value排序,将map降序或者升序排序之后,然后在去遍历这个商品信息和价格信息,这样就可以得到想要的结果了。
下面总结一下map根据value和key进行排序的用法。
一、根据map的value进行排序
Map<String, Integer> goodsCodeMapPrice = new HashMap<>();
goodsCodeMapPrice.put("goods1", 3);
goodsCodeMapPrice.put("goods2", 8);
goodsCodeMapPrice.put("goods3", 4);
goodsCodeMapPrice.put("goods4", 10);
// 将这个map转换成list以便排序
List<Map.Entry<String, Integer>> list = new ArrayList<>(goodsCodeMapPrice.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
// 默认的是从小到大排序,
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
// 从大到小排序
// return (o2.getValue() - o1.getValue());
// 从小到大排序
return (o1.getValue() - o2.getValue());
}
});
// 输出排序后的结果
for (Map.Entry<String, Integer> t : list) {
System.out.println(t.getKey() + ":" + t.getValue());
}
二、根据map的key进行排序
// 先将key转换成一个数组,然后利用Arrays.sort()对这个key数组进行排序,
// 然后在遍历这个数组,根据key去取map中的数据,此时就是排好序的数据了
HashMap map = new HashMap();
map.put("goods1", "0201");
map.put("goods4", "01");
map.put("goods2", "0304");
map.put("goods3", "0101");
Object[] key = map.keySet().toArray();
Arrays.sort(key);
for (int i = 0; i < key.length; i++) {
System.out.println(map.get(key[i]));
}
参考博文:
(1) https://www.cnblogs.com/kentyshang/archive/2007/07/04/805397.html (可以参考,讲的比较仔细)
(2) http://www.51gjie.com/java/681.html (集合框架)
(3) https://ixyzero.com/blog/archives/3973.html
(4) https://www.tracholar.top/2018/01/14/sort-a-mapkey-value-by-values-java/
(5) https://blog.csdn.net/Derek_BMW/article/details/9852929
(6) https://www.cnblogs.com/chenssy/p/3264214.html