思路:利用java8的分组(groupingBy) 可以求出每个字符出现的次数返回的是一个Map,对该Map的值进行排序,最后再转回LinkedHashMap(保持顺序),只是为了一行代码实现而已
String[] names = { "张三", "张三", "李四", "李四", "李四", "李四", "王五", "A", "B", "C", "C" };
Map<String, Long> finalMap = Stream.of(names)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting())).entrySet().stream()
.sorted((v1, v2) -> v2.getValue().compareTo(v1.getValue()))
.collect(Collectors.toMap(Entry::getKey, Entry::getValue, (m1, m2) -> m2, LinkedHashMap::new));
System.out.println(finalMap);
(里面的m1,和m2是当map的key出现重复后要采取的措施,这里是后面覆盖前面,文中的环境下是不可能重复的)