企业网站seo优,wordpress数据库分析,中核华兴建设有限公司投标网站,桂林视频网站制作Java中的Map集合如何根据key值排序#xff08;HashMapString,Object#xff09;#xff1f;
Map集合的键#xff08;key#xff09;默认是按照它们的hashCode排序的#xff0c;这在有时间不符合业务排序。如果你想要根据Map的key值进行排序#xff0c;一般以下…Java中的Map集合如何根据key值排序HashMapString,Object
Map集合的键key默认是按照它们的hashCode排序的这在有时间不符合业务排序。如果你想要根据Map的key值进行排序一般以下有几种方法可以实现。
方法一使用TreeMap
使用TreeMap类它会自动根据key的自然顺序或自定义比较器进行排序。
1、使用key(String)的自然排序:
代码示例
// 假设Map为HashMap
MapString, Integer unsortedMap new HashMap();
// 添加元素到unsortedMap
unsortedMap ... ; // 使用TreeMap进行排序
MapString, Integer sortedMap new TreeMap(unsortedMap);
2、使用自定义规则排序传入Comparator自定义排序规则
// 假设为HashMapString, Object map
// 未排序的HashMap
MapString, Object unSortMap ...; // 使用TreeMap并提供一个Comparator用于排序key
MapString, Object sortedMap new TreeMap(new ComparatorString() {Overridepublic int compare(String k1, String k2) {// 对于字符串key升序排序return k1.compareTo(k2);// 若需要降序排序则可以改为// return k2.compareTo(k1);}
});// 将原始Map的内容复制到TreeMap中此时Map会根据key排序
sortedMap.putAll(unSortMap );
方法二使用lambda表达式和Stream流简化操作
示例代码:
// 按照key 升序排序
MapString, Object sortedMap unSortMap.entrySet().stream().sorted(Map.Entry.comparingByKey()).collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue,// 解决可能存在的键冲突问题默认保留第一个值(oldValue, newValue) - oldValue,// 提供一个新的TreeMap实例作为收集器用于保持排序() - new TreeMap() ));// 或者如果要降序排序
MapString, Object sortedMapDescending originalMap.entrySet().stream().sorted(Map.Entry.String, ObjectcomparingByKey().reversed()).collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue,// 处理键冲突(oldValue, newValue) - oldValue, () - new TreeMap())); 注意此处不论方法一、方法二对于Map中key为String类型的数据都是底层都是按照字典顺序进行排序的。 所以一旦有一些特殊要求的排序 例如key为“123-234”“2134-1234”“2-123” 需要根据key排序为 “2-123”“123-234”“2134-1234”时就需要重新书写自定义的排序方法 或者 考虑其他的方式实现指定key排序了。 讨论一下: 上面key值的Map该如何排序
// 例“2-123”“123-234”“2134-1234”MapString, Object unSortMap new HashMap();
map.put(123-234,2);
map.put(2-123,1);
map.put(2134-1234,3);// 使得unSortMap 按照key值为“2-123”“123-234”“2134-1234”进行排序