0

PiorityBlockingQueueその中のアイテムをソートする必要があるこの問題が発生しています。ユーザーがキューに追加されるアイテムを並べ替えることができるいくつかのオプションがあります。

私が立ち往生しているのは、Item.

比較の選択は、 のコンストラクターで決定されMyQueueます。ただし、(Low、Medium、High など) のカウントは後で決定されます。それが決定されたら、ソートが正しくなるように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;
         }    
    }

このステートメントは、このクラスからは機能しません。

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);
    }
}
4

1 に答える 1

0

あなたの問題はcomparator.update(aString);正しいコンパイルエラーだと思いますか?

comparatorこれは、として宣言したためですComparator<Ticket>。つまり、として「見ている」ため、ComparatorメソッドComparatorはありませんupdate()

あなたはそれを次のように宣言する必要がありますItemComparator

すなわち

private ItemComparator comparator;
于 2012-10-11T04:16:02.907 に答える