java簡潔地根據map中的value或key進行排序
阿新 • • 發佈:2019-01-01
先上程式碼再解釋
其中我們可以看到根據map中的value排序只用了一行程式碼public static void main(String[] args) { Map<String,Integer> map = new HashMap<>(); map.put("nine",9); map.put("six",6); map.put("name",6); map.put("eight",8); map.put("zero",0); map.put("one",1); map.put("four",4); map.put("two",2); sortMap(map); } public static void sortMap(Map<String, Integer> map){ map.entrySet().stream().sorted(Comparator.comparing(e->e.getValue())).forEachOrdered(e->System.out.println(e)); }
map.entrySet().stream().sorted(Comparator.comparing(e->e.getValue())).forEachOrdered(e->System.out.println(e));
接著來解釋一下,在eclipse將滑鼠放到sorted上會出現下面提示資訊,
即表示sorted的引數為一個關於Entry<String, Integer>的比較器,然後我們想通過呼叫Comparator的方法comparing構造出一個比較器,使用類似的方法可知,comparing的功能為提取排序關鍵詞,然後通過lamda表示式簡潔地構造了一個函式,e->e.getValue()和e::e.getValue()是相同的,然後對一次對每個排好序的entry進行輸出操作。
類似函式
1、進行降序排序
map.entrySet().stream().sorted(Comparator.comparing(e->-e.getValue())).forEachOrdered(e->System.out.println(e));
2、將結果儲存在List中
List<Map.Entry<String,Integer>> sorted = new LinkedList<>(); map.entrySet().stream().sorted(Comparator.comparing(e->e.getValue())).forEachOrdered(e->sorted.add(e));