将字符串按照出现次数降序输出(Comparator接口)

题目描述

给定一个字符串 " happy ",将字符串按照字符出现次数降序输出

输出:pphay

import java.util.*;

class Solution {
public static void main(String[] args) {
String s = "happy";
HashMap<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
if (map.containsKey(s.charAt(i))) {
int count = map.get(s.charAt(i));
map.put(s.charAt(i), count + 1);
} else {
map.put(s.charAt(i), 1);
}
}

    /*第一种方法,先sort再forEach*/
    // 对Value降序,把HashMap变成List
    List<Map.Entry<Character, Integer>> newMap = new ArrayList<>(map.entrySet());
    //给sort方法自定义一个比较器,重写compare方法
    Collections.sort(newMap, new Comparator<Map.Entry<Character, Integer>>() {
        @Override
        public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
            // 也可以根据key来排序
            return o2.getValue() - o1.getValue(); //o1-o2升序,o2-o1降序
        }
    });
}

// 使用lambda表达式代替第一种方法中的匿名内部类
Collections.sort(newMap,(o1,o2) -> o2.getValue().compareTo(o1.getValue())); //也可以使用compareTo方法来代替减法,o1.compareTo(o2)升序,o2.compareTo(o1)降序


//再对newMap进行遍历,此时newMap是List类型的
newMap.forEach(
entry -> {
    for (int i = 0;i < entry.getValue();i++)
        System.out.print(entry.getKey());
}
);

/*第二种方法,使用stream,sort,forEach一气呵成*/
 newMap.stream().sorted(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()) * -1;
        }
    }).forEach(
            entry-> {
                for (int i = 0;i < entry.getValue();i++)
                System.out.print(entry.getKey());
            }
    );
StringBuilder builder = new StringBuilder();
/*使用lambda表达式代替第二种方法的匿名内部类*/
newMap.stream()
    .sorted((o1,o2) -> o1.getValue().compareTo(o2.getValue()) * -1)
    .forEach(entry -> {
        for (int i = 0;i < entry.getValue();i++) {
            // System.out.print(entry.getKey());
            builder.append(entry.getKey());
        }
    });

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容