出自:@Jason.Tang
https://blog.csdn.net/qq_34382367
原理:对比ASCII码。
JAVA8代码:
package com.redis;
import java.util.*;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("2018-10-12", 22);
map.put("2018-11-12", 12);
map.put("2018-09-12", 23);
map.put("2018-12-12", 43);
map.put("2018-01-12", 123);
map.put("2019-10-12", 55);
map.put("2019-07-12", 55);
// 降序
LinkedHashMap<String, Integer> ascLinkedHashMap = map.entrySet().stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(oldValue, newValue) -> newValue,
LinkedHashMap::new));
// 升序
LinkedHashMap<String, Integer> descLinkedHashMap = map.entrySet().stream()
.sorted(Map.Entry.comparingByKey()) //按key排序
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, //key 和 value
(oldValue, newValue) -> newValue, //移除相同的值
LinkedHashMap::new)); //加入到descLinkedHashMap中
}
}
结果:
JAVA7代码:
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
public class MapSortDemo {
public static void main(String[] args) {
Map<String, String> map = new TreeMap<String, String>();
map.put("2019-05-09", "Mazda");
map.put("2019-01-08", "Toyta");
map.put("2019-04-25", "Honda");
map.put("2018-07-30", "BMW");
Map<String, String> resultMap = sortMapByKey(map); //按Key进行排序
for (Map.Entry<String, String> entry : resultMap.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
/**
* 使用 Map按key进行排序
* @param map
* @return
*/
public static Map<String, String> sortMapByKey(Map<String, String> map) {
if (map == null || map.isEmpty()) {
return null;
}
Map<String, String> sortMap = new TreeMap<String, String>( // TreeMap : 内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序。
new MapKeyComparator());
sortMap.putAll(map);
return sortMap;
}
}
/**
* 比较器类
* */
class MapKeyComparator implements Comparator<String> {
@Override
public int compare(String str1, String str2) {
return str1.compareTo(str2); // 升序 反过来即降序:str2.compareTo(str1)
}
}
结果: