1. 程式人生 > >java簡潔地根據map中的value或key進行排序

java簡潔地根據map中的value或key進行排序

先上程式碼再解釋

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中的value排序只用了一行程式碼
map.entrySet().stream().sorted(Comparator.comparing(e->e.getValue())).forEachOrdered(e->System.out.println(e));

接著來解釋一下,在eclipse將滑鼠放到sorted上會出現下面提示資訊,

即表示sorted的引數為一個關於Entry<StringInteger>的比較器,然後我們想通過呼叫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));