这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战
前言
在我们的业务逻辑的编写中,经常会使用到各种各样的集合类,那么我们最常用的集合类之一就是Map了,那么我们对使用Map的情况下,有一个非常频繁的需求点就是对Key值排序或者对Value值排序。
Map排序
使用TreeMap
使用TreeMap,往里面添加元素,那么TreeMap内的元素会按照Key值的自然顺序进行升序排列下来。例如下面的代码,会按照字符串的自然顺序进行排序下来。 abc->bcd->cdf。
Map<String, Object> map = new HashMap<>();
map.put("cdf", new Object());
map.put("abc", new Object());
map.put("bcd", new Object());
使用ArrayList
这是一种比较取巧的方式,通过Map.keySet()的方法将Map内的Key值全部放到List中,然后使用Collections.sort的方法进行排序。具体代码如下:
List<String> employeeByKey = new ArrayList<>(map.keySet()); Collections.sort(employeeByKey);
同样的方式也可以将Value值放入到List中,进行排序,也可以得到相同的效果。
使用Lambdas和Stream流
我们也可以使用Java8的新特性,Lambda表达式去排列map的key值,例如可以使用comparingByKey比较器
map.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.forEach(System.out::println);
同样的也可以使用comparingByValue比较器来对map的value值进行排序
map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.forEach(System.out::println);
使用Guava
我们可以使用Google的一个Java类库——Guava,他可以让我们对HashMap进行排序,首先,我们可以声明一个Ordering,作为我们想要排序的一个字段
Ordering naturalOrdering = Ordering.natural() .onResultOf(Functions.forMap(map, null));
然后我们就可以使用ImmutableSortedMap取展示对应的结果
ImmutableSortedMap.copyOf(map, naturalOrdering);
总结
Hash表的实现HashMap是我们最常用的工具类,对于Map的使用我们要非常熟悉,在Java8的版本,Map也添加了很多有用的函数,都是关于Lambda的函数式编程来实现的。大家有兴趣的话可以去了解下。