Java8中对HashMap的Value值进行排序
By:Roy.LiuLast updated:2017-09-13
在Java8中对java.util.Comparator 和 Map.Entry 增加了新的方法用来排序。可以对HashMap, HashSet, HashTable, LinkedHashMap, TreeMap, 甚至ConcurrentHashMap都可以排序。基本思路就是先拿到集合,可以用entrySet()方法得到。然后调用stream方法,里面就可以调用sort方法了。对Map的排序,一般涉及两种,一是针对key,另外一种是针对value进行排序.对key的排序比较简单,这里主要介绍对Value的排序。
1. 对Value进行排序
1. 对Value进行排序
package com.java8.maptest; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import static java.util.stream.Collectors.*; import static java.util.Map.Entry.*; /* * Java Program to sort a Map by values in Java 8 * */ public class MapSortByValue { public static void main(String[] args) throws Exception { // a Map with string keys and integer values Mapbudget = new HashMap<>(); budget.put("clothes", 120); budget.put("grocery", 150); budget.put("transportation", 100); budget.put("utility", 130); budget.put("rent", 1150); budget.put("miscellneous", 90); System.out.println("map before sorting: " + budget); // let's sort this map by values first Map sorted = budget .entrySet() .stream() .sorted(comparingByValue()) .collect( toMap(e -> e.getKey(), e -> e.getValue(), (e1, e2) -> e2, LinkedHashMap::new)); System.out.println("map after sorting by values: " + sorted); // above code can be cleaned a bit by using method reference sorted = budget .entrySet() .stream() .sorted(comparingByValue()) .collect( toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new)); // now let's sort the map in decreasing order of value sorted = budget .entrySet() .stream() .sorted(Collections.reverseOrder(Map.Entry.comparingByValue())) .collect( toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new)); System.out.println("map after sorting by values in descending order: " + sorted); } }
From:一号门
Previous:python3,Django验证码生成方法
COMMENTS