java - Java - 有序映射
问题描述
我的代码提示用户输入 0 到 100 之间的数字,然后计算每个数字出现的次数。
我正在尝试按以下方式对我的 TreeMap 进行排序:
这是我下面的代码,目前,输出未排序。我已尝试通过此链接https://beginnersbook.com/2014/07/how-to-sort-a-treemap-by-value-in-java/实现该方法,但出现以下错误:
原因:无法推断类型变量 K,V(参数不匹配;ArrayList 无法转换为 Map)其中 K,V 是类型变量:K 扩展方法 sortByValues(Map) 中声明的对象 V 扩展方法 sortByValues 中声明的 Comparable (地图)
有什么建议么?
public static void main(String[] args){
Scanner input = new Scanner(System.in);
ArrayList<Integer> Digits = new ArrayList<>();
ArrayList<Integer> UniqueDigits = new ArrayList<>();
System.out.print("Enter digits: ");
int value;
do {
value = input.nextInt();
if (value > 0 && value < 101)
Digits.add(value);
} while (value != 0);
Set<Integer> uniqueDigits = new HashSet<Integer>(Digits);
Map<Integer, Integer> frequencies = new HashMap<Integer, Integer>();
for (Integer uniqueDigit : uniqueDigits) {
frequencies.put(uniqueDigit, Collections.frequency(Digits, uniqueDigit));
}
// Printing
for (Integer key : frequencies.keySet()) {
if (frequencies.get(key) > 1) {
System.out.println(key + " - " + frequencies.get(key) + " times");
} else if (frequencies.get(key) == 1) {
System.out.println(key + " - " + frequencies.get(key) + " time");
}
}
}
}
解决方案
您不能按值对 TreeMap 进行排序。我知道答案是存在的。它试图回答一个类似的问题:“我如何用螺丝刀煮咖啡?” - 试图回答这个问题是没有意义的。
TreeMap 会根据键自动对自身进行排序。
这就是它的作用。它不按价值排序,如果没有愚蠢的黑客,就不能这样做。
所以,你可以做什么?
对于初学者,忘记 TreeMap。我想你的想法是:我需要一个带有某种排序的地图 - 让我看看 API - 哦,有这个 TreeMap 的东西,它提到了排序 - 我会用它。正如我所介绍的,TreeMap 明确表示按键排序- 如果按键排序不是您要查找的内容,那么 TreeMap 不是您要查找的内容。使用简单的简好旧地图。
然后,您可以通过流式传输地图的值并对这些值进行排序来对值进行排序:
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 10);
map.put(2, 5);
map.put(3, 30);
Comparator<Map.Entry<Integer, Integer>> comparator = Comparator.comparingInt(
entry -> entry.getValue().intValue()).reversed();
System.out.println(map.entrySet().stream()
.sorted(comparator)
.map(entry -> String.format("%d occurs %d times.", entry.getKey(), entry.getValue()))
.collect(Collectors.joining("\n")));
将打印你想要的。
推荐阅读
- c# - 将 float[] 转换为 byte[] 的最快方法是什么?
- linux - 如何设置 ubuntu (linux) 从命令行使用 github.com 的双重身份验证
- c - 我的计算器忽略了我用来读取数学运算符的 scanf 函数
- python - 在烧瓶应用程序中提取带有关键词的句子
- java - Android Google Calendar API 获取凭据
- python - wkhtmltopdf 以非零代码 -9 退出。错误。我怎样才能摆脱这个错误?
- arrays - 按 id 组合两个数组
- html - 做什么
标签在html中做什么? - java - 从Keycloak(用户->更新,删除)时如何将事件发送到我的服务器?
- django - 如何将两个条件作为参数传递给 django 中的 get() 查询?