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