java - 映射和优先队列
问题描述
我想创建一个带有键作为产品 id(Integer) 的 Map,然后将值设为 priorityQueue 作为值。这将存储购买了相同产品的所有用户对象。这需要根据一些逻辑按 desc 顺序排列。
我不太确定如何在地图中的 desc 中订购 pq。通常我可以做 (a,b) -> Integer.compare(b,a) 但在这种情况下我不确定。
Map<Integer, PriorityQueue<User>> productAssociation = new HashMap<Integer, PriorityQueue<User>>();
解决方案
给定一个
public class User {
private final int valueToSortOn;
public User(int valueToSortOn) {
this.valueToSortOn = valueToSortOn;
}
public int getValueToSortOn() {
return valueToSortOn;
}
}
和一个
Map<Integer, PriorityQueue<User>> productAssociation = new HashMap<Integer, PriorityQueue<User>>();
那么使用 lambda 比较器创建新队列实例的方法可能如下所示:
int productId = 42;
PriorityQueue<User> productQueue = productAssociation.getOrDefault(productId, new PriorityQueue<>((u1, u2) -> u2.getValueToSortOn() - u1.getValueToSortOn()));
推荐阅读
- azure - IIS Web App Manage 的物理路径 - Azure DevOps
- angular - 如何为全局 websocket 变量定义 Angular8 上下文提供程序
- linux - 通过 bash 连接 DF 和 LSBLK Linux 命令的输出
- javascript - 如果全局安装了 npm 包,如何在本地包中插入依赖项
- ubuntu - 无法获取 Http -> Https 301 重定向以使用 Nginx
- c++ - x86 Collatz 猜想实现中的分段错误
- bash - 为什么 /usr/local/bin 中的自制符号链接/别名不能按“which”命令的预期工作?
- c# - 如何为我的角色移动优化 Unity C# 代码?
- xcode - Xcode 12.1 调试 EXC_BAD_ACCESS
- python - 如何使用图像处理区分两种类型的图像?