Im essayant d'utiliser la méthode de comparaison de substitution de PriorityQueue et je veux obtenir les résultats suivants:comparateur de PriorityQueue en java
i ont la liste actuelle:
RG3
PR1
PR2
RG4
RG1
RG2
le RG fait référence à une personne ordinaire et le PR se rapporte à une personne avec la priorité, les nombres représentent les tours. ce que je veux, c'est obtenir un premier entré, premier sorti, sauf si c'est une personne prioritaire qui ira en haut de la file d'attente à son tour. donc dans la liste que je veux le résultat suivant
PR1
PR2
RG1
RG2
RG3
RG4
Heres ce Ive fait jusqu'à présent:
Queue<Ficha> cola = new PriorityQueue<>(6, idComparator);
while (!list.isEmpty()) //this list is the unsorted list.
{
aux = list.remove(0);
cola.add(aux); // adds it to the priority queue
}
while(!cola.isEmpty())
{
aux = cola.poll();
System.out.println(aux.getCod_priority()+aux.getTurn()); // this shows me the order of the queue
}
}
public static Comparator<Ficha> idComparator = new Comparator<Ficha>()
{
@Override
public int compare(Ficha f1, Ficha f2) {
return (int) ((f1.getTurn()+prioridad(f1.getCod_priority())) - (f2.getTurn()+prioridad(f2.getCod_priority())));
}
};
private static long prioridad(String cod_priority) // this method i use it to give the cod_priority a int value to compare
{
if(cod_tipo_ficha=="PR")
{
return 10000;
}
else
{
return 1;
}
}
et quand je le lance, je reçois l'ordre suivant:
PR1
RG1
RG2
PR2
RG3
RG4
je sais mon problème est dans la méthode du comparateur mais je ne sais pas comment atteindre la file d'attente que je veux.
Je sais qu'il ya beaucoup de questions liées à la façon de comparer mais les seules réponses que je vois est quand vous comparez les chaînes. et celui-ci j'ai besoin de comparer la chaîne de priorité et l'int.
@amique qui est une erreur commune. Je fais 5 de ces bugs par jour. – alexey28