按照value排序,一般排序按照key的話,一般key都是Integer和String,用TreeMap就可以了,另外中方式是把Map按照Map.Entry取出來,放到List裡面,然後借助Collectins的sort進行排序。
代碼:
/**
* @author wzx
* @time 2018/2/9
*/
public class MapSortTest {
public static void main(String[] args) {
Pet p1 = new Pet("dog", );
Pet p2 = new Pet("cat", );
Pet p3 = new Pet("pig", );
Pet p4 = new Pet("wolf", );
Map<String, Pet> map = new HashMap<>();
//Map<String, Pet> map = new TreeMap<String,Pet>();
map.put("d", p1);
map.put("c", p2);
map.put("p", p3);
map.put("w", p4);
System.out.println(map);
map = compareByValue(map);
System.out.println(map);
map = compareByKey(map);
System.out.println(map);
sortByKey(map);
sortByKey2(map);
sortByValue(map);
}
/**
* 基本的value排序方式
* @param map
* @return
*/
public static Map compareByValue(Map map) {
if (map == null || map.isEmpty()) {
return null;
}
List<Map.Entry<String, Pet>> list = new ArrayList<Map.Entry<String, Pet>>(map.entrySet());
Collections.sort(list, new MapValueComparator());
Map<String, Pet> returnMap = new LinkedHashMap<>();
for (Map.Entry<String, Pet> entry : list) {
returnMap.put(entry.getKey(), entry.getValue());
}
return returnMap;
}
/**
* 基本的key排序方式
* @param map
* @return
*/
public static Map compareByKey(Map map) {
if (map == null || map.isEmpty()) {
return null;
}
Map returnMap = new TreeMap<String, Pet>(new MapKeyComparator());
returnMap.putAll(map);
return returnMap;
}
static class MapKeyComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
}
static class MapValueComparator implements Comparator<Map.Entry<String, Pet>> {
@Override
public int compare(Map.Entry<String, Pet> o1, Map.Entry<String, Pet> o2) {
return o1.getValue().old - o2.getValue().old;
}
}
}
使用Java8中Map.Entry的新方法:
原理:map提取Entry的list之後轉化成流(string()),然後把流排序按照傳入的Comparator排序。
key排序:
public static void sortByKey(Map map) {
List<Map.Entry<String, Pet>> compareByValue = (List<Map.Entry<String, Pet>>) map.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toList());
compareByValue.forEach(System.out::println);
System.out.println("sortByKey: end");
}
value排序:
public static void sortByValue(Map map) {
List<Map.Entry<String, Pet>> compareByValue = (List<Map.Entry<String, Pet>>) map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.collect(Collectors.toList());
compareByValue.forEach(System.out::println);
}
傳入比較器參數:
public static void sortByKey2(Map map) {
List<Map.Entry<String, Pet>> compareByValue = (List<Map.Entry<String, Pet>>) map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue((Pet pet1, Pet pet2) -> {
return pet1.name.length() - pet2.name.length();
}))
.collect(Collectors.toList());
compareByValue.forEach(System.out::println);
System.out.println("sortByKey2: end");
}
http://blog.csdn.net/kaka0930/article/details/52996486###;