2017-06-27 2 views
1

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.

Répondre

0

il suffit de changer cod_tipo_ficha == "PR" à

if("PR".equals(cod_tipo_ficha)) { 
    ... 
} 

Si le travail

+0

@amique qui est une erreur commune. Je fais 5 de ces bugs par jour. – alexey28