題目描述
給定一個(gè)字符串 " happy ",將字符串按照字符出現(xiàn)次數(shù)降序輸出
輸出: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方法自定義一個(gè)比較器耸采,重寫compare方法
Collections.sort(newMap, new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
// 也可以根據(jù)key來排序
return o2.getValue() - o1.getValue(); //o1-o2升序锣杂,o2-o1降序
}
});
}
// 使用lambda表達(dá)式代替第一種方法中的匿名內(nèi)部類
Collections.sort(newMap,(o1,o2) -> o2.getValue().compareTo(o1.getValue())); //也可以使用compareTo方法來代替減法未玻,o1.compareTo(o2)升序辉浦,o2.compareTo(o1)降序
//再對newMap進(jìn)行遍歷颅和,此時(shí)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表達(dá)式代替第二種方法的匿名內(nèi)部類*/
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());
}
});
}