如果您不能使用TreeMap
,在Java 8中,我们可以使用toMap()方法,Collectors
该方法具有以下参数:
- keymapper:映射函数以生成密钥
- valuemapper:映射函数以产生值
- mergeFunction:一个合并函数,用于解决与同一键关联的值之间的冲突
- mapSupplier:返回新的空Map并将其插入结果的函数。
Java 8示例
Map<String,String> sample = new HashMap<>(); // push some values to map
Map<String, String> newMapSortedByKey = sample.entrySet().stream()
.sorted(Map.Entry.<String,String>comparingByKey().reversed())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
Map<String, String> newMapSortedByValue = sample.entrySet().stream()
.sorted(Map.Entry.<String,String>comparingByValue().reversed())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1,e2) -> e1, LinkedHashMap::new));
我们可以修改该示例以使用自定义比较器并基于以下项对键进行排序:
Map<String, String> newMapSortedByKey = sample.entrySet().stream()
.sorted((e1,e2) -> e1.getKey().compareTo(e2.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1,e2) -> e1, LinkedHashMap::new));