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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM