无法在实现Comparator的类中调用自定义方法

时间:2012-10-11 00:49:16

标签: java priority-queue comparator

我遇到这个问题,我有一个PiorityBlockingQueue来对其中的项目进行排序。用户可以对要添加到队列中的项目进行排序的几个选项。

我坚持的那个是试图按Item最常见的顺序排队。

比较的选择在MyQueue的构造函数中确定。但是(例如,低,中,高)的计数直到稍后才确定。确定后,我想从update(String lst)调用ItemComparator方法更新hashmap,以便排序正确。

所以我的问题是我无法调用该方法。我知道我错过了什么,但我无法理解。有帮助吗?也许有比我现在做的更好的设计?

 public class ItemComparator implements Comparator<Item>
    {        
         public void update(String lst){
             test = lst;
         }

         public int compare(Item o1, Item o2) {
            HashMap<String,Integer> priority = new HashMap<>();
            priority.put("LOW", 1);
            priority.put("MEDIUM", 2);
            priority.put("HIGH", 3);

            if (priority.get(o1.getPriority()) > priority.get(o2.getPriority())) {
                return -1;
            }
            if (priority.get(o1.getPriority()) < priority.get(o2.getPriority())) {
                return 1;
            }
            return 0;
         }    
    }

此声明不适用于此类comparator.update(aString);

public class MyQueue implements AQueue{

    private Comparator<Ticket> comparator;
    private PriorityBlockingQueue<Ticket> listOfTickets;
    private String policy;

    BlockingQImpl(String processingPolicy) throws InvalidDataException {
        setPolicy(processingPolicy.toUpperCase());
        setComparator(policy);
    }

    private void setComparator(String policy) throws InvalidDataException {
        if (policy.equals("THIS")) {
            comparator = new ItemComparator(countString);
        } 
        listOfTickets = new PriorityBlockingQueue<>(10, comparator);
    }

    public void addList(int id) {
        ticks.add(id)
        comparator.update(aString);
    }
}

1 个答案:

答案 0 :(得分:0)

我认为您的问题是comparator.update(aString);正确的编译错误?

这是因为您已将comparator声明为Comparator<Ticket>,这意味着您将其视为Comparator,而在Comparator中则没有update()方法。

您应该将其声明为ItemComparator

private ItemComparator comparator;