2015-12-15 2 views
0

J'ai un petit problème, j'espère que vous pourriez m'aider à le résoudre.Java: Comment trier une liste d'objets?

J'ai une classe appelée entité qui a plusieurs attributs, deux de ces attributs sont les id et l'utilitaire:

public class Entity implements Comparable <Entity> { 

    int id; 
    int utility; 

} 

Ensuite, j'ai plusieurs objets d'entité à l'intérieur d'un ArrayList, comme celui-ci :

ArrayList<Entity> sorted_entities = new ArrayList<Entity> 
//added entities 

Maintenant, je veux trier la liste en fonction des entités UTILITY. J'ai essayé plusieurs soluctions comme celui-ci que je lis ici, en utilisant un comparateur personnalisé:

Collections.sort(sorted_entities, new Comparator<Entity>() { 

public int compare(Entity a, Entity b) { 
    return a.utility.compareTo(b.utility); 
} 

}); 

Mais sur cette ligne:

return a.utility.compareTo(b.utility); 

j'ai rencontré l'erreur suivante: int ne peut pas être déréférencé et i Je n'ai aucune idée de comment le réparer. Pouvez-vous m'aider à résoudre ce problème ou à donner une autre solution? THX.

+0

Désolé j'ai trouvé plusieurs sujets mais je n'ai pas vu celui-ci avec le problème de comparateur. – Removed

+0

Je me demande vraiment pourquoi vous créez un 'Comparator', quand votre' Entity' implémente déjà 'Comparable'. – Tom

Répondre

1

Vous devez utiliser les types d'enveloppe:

return Integer.valueOf(a.utility).compareTo(Integer.valueOf(b.utility)); 

Vous pouvez omettre le fait convertir explicitement b.utility-Integer, car il sera autoboxed de toute façon.

Alternativement (encore mieux), vous pouvez également faire:

return Integer.compare(a.utility, b.utility); 

où la boxe ne sera impliqué.

+0

Merci, j'ai utilisé votre deuxième code et l'erreur a disparu. Mais un autre petit problème: Collections.sort (blabla, le code que j'ai posté à l'envers, modifié ofc) ne commande pas ma liste, ça ne fait rien. Je dois faire une sorte d'appel pour commander la liste? Désolé pour la question imbécile – Removed

+0

appelant 'Collections.sort()' avec l'argument correct devrait trier votre liste. Aucun travail supplémentaire n'est nécessaire. Essayez d'imprimer la liste après le tri et/ou le déboguer. –

+0

Ok rien, problème résolu, qui a aidé trop! Merci kocko! ^^ – Removed