这个问题在这里已经有答案了:
按值对Map排序(58个答案)
java 8 collectors.tomap sortedmap(5个答案)
上个月关门了。
我有一个hashmap,我尝试按它的值(从大到小)排序。我想要一个新的map对象,它是新排序的hashmap的克隆(或者直接排序hashmap本身的方法)。以下是我的代码:
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class Repetition {
public static Map<Object, Integer> countRepititions(Object[] e) {
Map<Object, Integer> occurrences = new HashMap<>();
for (int i = 0; i < e.length; i++) {
occurrences.putIfAbsent(e[i], 0);
occurrences.computeIfPresent(e[i], (k, v) -> v + 1);
}
return occurrences.entrySet().stream()
.sorted((e1, e2) -> e2.getValue().compareTo(e1.getValue()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, HashMap::new));
}
public static void main(String[] args) {
Object[] arr = { "cat", "dog", "cat", "cow", "cow", "cow" };
System.out.println(countRepititions(arr)); //should be cow, cat, dog
}
}
问题是输出是原始hashmap的输出,而不是排序的hashmap。如果有人能帮助我,我将不胜感激!
编辑:我通过使用linkedhashmap修改了当前代码。
1条答案
按热度按时间wgmfuz8q1#
你想用
LinkedHashMap
保持秩序的(适于分类的)。解决方案需要两个流:打印出这样的返回Map会导致:
{cow=3, cat=2, dog=1}