首页 > 解决方案 > 映射和优先队列

问题描述

我想创建一个带有键作为产品 id(Integer) 的 Map,然后将值设为 priorityQueue 作为值。这将存储购买了相同产品的所有用户对象。这需要根据一些逻辑按 desc 顺序排列。

我不太确定如何在地图中的 desc 中订购 pq。通常我可以做 (a,b) -> Integer.compare(b,a) 但在这种情况下我不确定。

Map<Integer, PriorityQueue<User>> productAssociation = new HashMap<Integer, PriorityQueue<User>>();

标签: javahashmappriority-queue

解决方案


给定一个

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()));

推荐阅读