Get Hashmap Top 3 Keys
我有一个哈希图来存储文本中出现的字符数。我试图打印出前三个事件,但打印错误。
1 2 3 4 5 6 7 8 9 10 |
使用Java 8,您可以使用下面的代码(*):
1 2 3 4 | List<Entry<Character, Integer>> top3 = map.entrySet().stream() .sorted(comparing(Entry::getValue, reverseOrder())) .limit(3) .collect(toList()); |
(*)具有以下导入:
您可以将程序修改为此表单:
1 2 3 4 5 6 7 8 9 10 11 12 |
这里有一个使用Java 8流的解决方案,它基于@ AssiLIAS提供的一个解决方案。它执行完整的任务,将字符串中的字符计数收集到映射中,并选择前3个条目。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.util.ArrayList; import static java.util.Comparator.*; import java.util.List; import java.util.Map.Entry; import static java.util.stream.Collectors.*; public class Stream { public static void main(final String[] args) { final String text ="hello stackoverflow, let's count these character occurrences!"; final char[] charArray = text.toCharArray(); final List<Character> characters = new ArrayList<Character>(text.length()); for (final char c : charArray) { characters.add(c); } final List<Entry<Character, Long>> top3 = characters.stream() .collect(groupingBy(Character::charValue, counting())) .entrySet().stream() .sorted(comparing(Entry::getValue, reverseOrder())).limit(3).collect(toList()); System.out.println(top3); } } |
。
输出:
1 | [e=8, c=7, =6] |
您需要按出现次数对条目进行排序,并获得前3个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | List<Entry<Character, Integer>> entryList = new ArrayList<>(list.entrySet()); Collections.sort(entryList, new Comparator<Entry<Character, Integer>>(){ @Override public int compare(Entry<Character, Integer> e1, Entry<Character, Integer> e2) { return e2.getValue() - e1.getValue(); // descending order } }); // now let's get the top 3 List<Character> top3 = new ArrayList<>(3); for(Entry<Character, Integer> e : entryList) { top3.add(e.getValue()); if(top3.size() == 3) { break; } } |
号