import java.util.*;
import java.util.stream.Stream;
public class Javatest89 {
/**
* 集合-Map(HashMap)、Collections工具类
* 练习3:统计一个字符串中每个字符出现的次数,保存到HashMap集合中,
* 通过排序,打印输出次数最多的前三个字符及次数
*
* 运行结果:
* 请输入一个字符串:
* abbcccdddd
* **********方法一***********
* d=4
* c=3
* b=2
* **********方法二***********
* a=1
* b=2
* c=3
* d=4
* **********方法三***********
* d=4
* c=3
* b=2
* **********方法四***********
* b出现次数:2
* c出现次数:3
* d出现次数:4
*/
public static void main(String[] args) {
System.out.println("请输入一个字符串:");
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
HashMap<Character,Integer> map = new HashMap<>();
//1、遍历字符串,统计每个字符出现的次数,并保存至map集合
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(map.containsKey(c)){
map.put(c,map.get(c)+1);
}
else{
map.put(c,1);
}
}
//2、根据出现次数多少进行排序
//第一种方法,List的sort方法
//2.1 转换成List
List<Map.Entry<Character,Integer>> entry = new ArrayList<>(map.entrySet());
//2.2 根据value进行排序
entry.sort(Map.Entry.comparingByValue());
System.out.println("**********方法一***********");
for (int i = entry.size() -1 ; i > entry.size() -4; i--) {
System.out.println(entry.get(i));
}
//第二种方法,sorted方法
Stream<Map.Entry<Character,Integer>> sorted
= map.entrySet().stream().sorted(Map.Entry.comparingByValue());
System.out.println("**********方法二***********");
sorted.forEach(System.out::println);
//第三种方法,Comparator的sort方法
List<Map.Entry<Character,Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
System.out.println("**********方法三***********");
for (int i = list.size() -1; i > list.size() -4 ; i--) {
System.out.println(list.get(i));
}
//第四种方法,自定义方法
List<Integer> list1 = new ArrayList<>();
for (Integer value:map.values()) {
list1.add(value);
}
System.out.println("**********方法四***********");
list1.sort(Integer::compareTo);
for (Map.Entry<Character,Integer> entry1:map.entrySet()) {
if(entry1.getValue() == list1.get(list1.size() -1) ||
entry1.getValue() == list1.get(list1.size() -2) ||
entry1.getValue() == list1.get(list1.size() -3)){
System.out.println(entry1.getKey() + "出现次数:" + entry1.getValue());
}
}
}
}