package com.boco.nbd.wios.log.util; import java.util.*; import java.util.stream.Collectors; /** * @Description: TODO * @Author: ZQY * @Date: 2022/10/25 **/ public class MapUtil { private static Comparator<Map.Entry> comparatorByKeyAsc = (Map.Entry o1, Map.Entry o2) -> { if (o1.getKey() instanceof Comparable) { return ((Comparable) o1.getKey()).compareTo(o2.getKey()); } throw new UnsupportedOperationException("键的类型尚未实现Comparable接口"); }; private static Comparator<Map.Entry> comparatorByKeyDesc = (Map.Entry o1, Map.Entry o2) -> { if (o1.getKey() instanceof Comparable) { return ((Comparable) o2.getKey()).compareTo(o1.getKey()); } throw new UnsupportedOperationException("键的类型尚未实现Comparable接口"); }; private static Comparator<Map.Entry> comparatorByValueAsc = (Map.Entry o1, Map.Entry o2) -> { if (o1.getValue() instanceof Comparable) { return ((Comparable) o1.getValue()).compareTo(o2.getValue()); } throw new UnsupportedOperationException("值的类型尚未实现Comparable接口"); }; private static Comparator<Map.Entry> comparatorByValueDesc = (Map.Entry o1, Map.Entry o2) -> { if (o1.getValue() instanceof Comparable) { return ((Comparable) o2.getValue()).compareTo(o1.getValue()); } throw new UnsupportedOperationException("值的类型尚未实现Comparable接口"); }; /** * 按键升序排列 */ public static <K, V> Map<K, V> sortByKeyAsc(Map<K, V> originMap) { if (originMap == null) { return null; } return sort(originMap, comparatorByKeyAsc); } /** * 按键降序排列 */ public static <K, V> Map<K, V> sortByKeyDesc(Map<K, V> originMap) { if (originMap == null) { return null; } return sort(originMap, comparatorByKeyDesc); } /** * 按值升序排列 */ public static <K, V> Map<K, V> sortByValueAsc(Map<K, V> originMap) { if (originMap == null) { return null; } return sort(originMap, comparatorByValueAsc); } /** * 按值降序排列 */ public static <K, V> Map<K, V> sortByValueDesc(Map<K, V> originMap) { if (originMap == null) { return null; } return sort(originMap, comparatorByValueDesc); } private static <K, V> Map<K, V> sort(Map<K, V> originMap, Comparator<Map.Entry> comparator) { return originMap.entrySet() .stream() .sorted(comparator) .collect( Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new)); } /** * 转换Map * * @param map * @return */ public static Map<String, Integer> getMap(List<Map<String, Object>> map) { String field = "key"; Map<String, Integer> genderCount = new HashMap<>(8); for (Map<String, Object> kv : map) { String key = null; Integer value = null; for (Map.Entry<String, Object> entry : kv.entrySet()) { if (field.equals(entry.getKey())) { key = (String) entry.getValue(); } else { value = Integer.parseInt(entry.getValue().toString()); } } genderCount.put(key, value); } return genderCount; } }