使用java8的函数式接口简化集合排序中Compartor的写法
/**
* 集合排序工具类
* 函数式接口简化代码
*/
public class CollectionSort {
public static void main(String[] args) {
Map<String,Integer> dataMap = new HashMap<>();
dataMap.put("c",2);
dataMap.put("a",7);
dataMap.put("f",5);
dataMap.put("p",9);
dataMap.put("z",8);
Map newMap = sortValue(dataMap);
System.out.println(newMap);
}
public static <T extends Comparable> Map sortKey(Map<String,T> dataMap){
List<Map.Entry<String,T>> entryList = new ArrayList<>(dataMap.entrySet());
Collections.sort(entryList,(m1,m2)->m1.getKey().compareTo(m2.getKey()));
return SortList(entryList);
}
public static <T extends Comparable> Map sortKeyDesc(Map<String,T> dataMap){
List<Map.Entry<String,T>> entryList = new ArrayList<>(dataMap.entrySet());
Collections.sort(entryList,(m1,m2)->m2.getKey().compareTo(m1.getKey()));
return SortList(entryList);
}
public static <T extends Comparable> Map sortValue(Map<String,T> dataMap){
List<Map.Entry<String,T>> entryList = new ArrayList<>(dataMap.entrySet());
Collections.sort(entryList,(m1,m2)->m1.getValue().compareTo(m2.getValue()));
return SortList(entryList);
}
public static <T extends Comparable> Map sortValueDesc(Map<String,T> dataMap){
List<Map.Entry<String,T>> entryList = new ArrayList<>(dataMap.entrySet());
Collections.sort(entryList,(m1,m2)->m2.getValue().compareTo(m1.getValue()));
return SortList(entryList);
}
private static <T extends Comparable> Map SortList(List<Map.Entry<String,T>> entryList) {
Iterator<Map.Entry<String,T>> it = entryList.iterator();
Map<String,T> tempMap = new LinkedHashMap<>();
while(it.hasNext()){
Map.Entry<String,T> mapEntry = it.next();
tempMap.put(mapEntry.getKey(),mapEntry.getValue());
}
return tempMap;
}
}