8
votes

Liste de tri par l'une de sa variable

J'ai une classe1 xxx

j'ai une liste de class1 ( list ). Je veux trier cette liste par soc , pour obtenir le class1 avec le plus élevé soc premier


3 commentaires

Avez-vous des stipulations? Doit-il être une méthode récursive ou quelque chose d'efficacité à haute efficacité (par exemple Quicksort)? Ou cherchez-vous une implémentation simple / simple? Vous pouvez finalement utiliser une boucle (), cependant, il serait très difficile pour l'ordinateur de le faire si vous avez une liste de 100 000 articles.


Dupliqué possible de Triez une liste du plus haut au plus bas


Pas un DUP ... S'il lui a demandé, il aurait changé sa question initiale dans une autre.


4 Réponses :


18
votes

Utilisez un comparateur

Collections.sort(list, new Comparator<Class1>() {
  public int compare(Class1 c1, Class1 c2) {
    if (c1.soc > c2.soc) return -1;
    if (c1.soc < c2.soc) return 1;
    return 0;
  }});


3 commentaires

Ne fonctionnera pas si un objet de classe1 a SOC = INTEGER.MIN_VALUE par exemple.


Code fixé maintenant. Version précédente (Retour C2.SOC - C1.SOC) Si cela ne fonctionnerait pas, par exemple si C2.SOC est de 2 000 000 000 et C1.SOC est de -1 000 000 000. "Presque toutes les recherches binaires et Mergesorts sont cassées" - googleresearch.blogspot.com/2006/06/...


Merci pour la prise, Aioobe et Julius!



0
votes

Créer une classe qui implémente comparateur , Créez votre méthode de tri personnalisée, puis transmettez une instance de cette classe dans cette fonction: Collections.sort


1 commentaires

Exemple: ajoutez des getters and Setters et vous pouvez utiliser this.list.sort (comparator.cacher (CLASS1 :: GETOC));



1
votes

Voici un exemple complet: xxx

Il imprime les éléments suivants: xxx


2 commentaires

Est-ce que s , s1 , soc , doit vraiment être un accès par défaut au lieu de privé?


S'ils sont privés, ils auraient besoin d'avoir des méthodes d'accesseur pour le comparateur de faire son travail (à moins que la classe1 mise en œuvre comparable et que vous ne spécifiez pas de comparateur)



0
votes

tandis que la réponse de Scott Stanchfield est généralement le moyen le plus simple de le faire en Java, si vous avez d'autres éléments fonctionnels que vous voudrez peut-être faire avec les propriétés de votre classe, il peut être utile d'utiliser GUAVA 'S fonction s. xxx pré>

alors vous pouvez utiliser son Commander classe Pour trier: P>

 List<Class1> list = ...;
 Collections.sort(list, Ordering.natural().reverse().onResultOf(Class1.GET_SOC));


0 commentaires