java - 为什么 PriorityQueue 在 Java 中不按数字排序?
问题描述
PriorityQueue<Pair<String, Integer>> pq = new PriorityQueue<>(
(a,b) -> a.getValue()==b.getValue() ? b.getKey().compareTo(a.getKey()) : a.getValue()-b.getValue()
);
例如。想要排序这个 {"love":2,"coding":1,"i":2,"leetcode":1} 结果为 {"i":2,"love":2,"coding":1 ,"leetcode":1} 但输出结果是 [love=2, coding=1, i=2, leetcode=1]
有人可以帮忙解释为什么吗?
解决方案
- 您需要颠倒减去值的顺序以获得降序。
- 您实际上需要删除所有元素才能查看顺序。
- 使用这些
Comparator.comparing
方法可以更清楚、更简洁地编写比较器。
PriorityQueue<Pair<String, Integer>> pq = new PriorityQueue<>(
Comparator.comparing((Pair<String, Integer> p)->p.getValue())
.reversed().thenComparing(Pair::getKey));
while(!pq.isEmpty()){
System.out.println(pq.poll());
}
推荐阅读
- php - 在 WooCommerce 中为特定产品类别的购物车项目自动添加产品
- cakephp - 从数据库创建下拉菜单
- php - 如何在 OpenCart 中做像 site.com/brands/BrandName/productName 这样的嵌套制造商?
- javascript - 如何在 json 中正确格式化 WP_REST_Response 并获取数组而不是对象?
- javascript - 我们如何将在 jspdf 中创建的 pdf 导出为图像?
- python - 如何提取嵌套在多个划分元素中的锚元素
- node.js - 为我在 Cloud Firestore 中的所有文档获取对象
- python-3.x - 如何计算“高斯函数的扩展”?
- python - 如何逐行添加到python中的numpy 2d数组?
- ios - 如果我更新我的分发证书,我是否也需要更新我的通知证书?