我想按字母顺序打印ArrayList中每个单词的计数。 我已经实现了代码,但是对于列表中的元素“ hihi”,我希望计数应为2而不是1。如何实现?
{//some code
Collections.sort(list);
System.out.println("Words with the count");
Map<String, Long> st1=new TreeMap<>();
for(String k : list){
st1.put(k,st1.getOrDefault(k, 0L)+1);
}
for(String k : st1.keySet()){
System.out.println(k+": "+st1.get(k));
}
//end of class}
答案 0 :(得分:1)
答案 1 :(得分:1)
请注意在TreeSet
上使用HashSet
。 TreeSet将使用元素的自然顺序对其进行排序。如果您希望使用不同的排序顺序,可以将Comparator
传递给TreeSet
的构造函数。
您应该注意,您当前的代码效率不高,因为它必须遍历整个列表以获取每个单词的频率计数。您最好先处理列表,然后计算频率并将其存储在地图中。例如:
Map<String, Long> frequency = new TreeMap<>();
for (String word : list) {
frequency.put(word, frequency.getOrDefault(word, 0L) + 1);
}
for (String word : frequency.keySet()) {
System.out.println(word + ": " + frequency.get(word));
}
您还可以使用流来执行以下操作。
list.stream()
.collect(Collectors.groupingBy(Function.identity(), TreeMap::new, Collectors.counting()))
.forEach((k, v) -> System.out.println(k + ": " + v));