Je suis intéressé par le tri d'une liste à partir d'un flux. Voici le code que j'utilise:
list.stream()
.sorted((o1, o2)->o1.getItem().getValue().compareTo(o2.getItem().getValue()))
.collect(Collectors.toList());
Est-ce que je manque quelque chose? La liste ne trie pas.
Il doit trier les listes en fonction de l'élément avec la valeur la plus basse.
for (int i = 0; i < list.size(); i++)
{
System.out.println("list " + (i+1));
print(list, i);
}
Et la méthode d'impression:
public static void print(List<List> list, int i)
{
System.out.println(list.get(i).getItem().getValue());
}
la source
list.sort(Comparator.comparing(o -> o.getItem().getValue()));
était nouveau pour moi. Génial!Java 8 fournit différentes méthodes API utilitaires pour nous aider à mieux trier les flux.
Si votre liste est une liste d'entiers (ou Double, Long, Chaîne, etc.), vous pouvez simplement trier la liste avec les comparateurs par défaut fournis par java.
Création d'un comparateur à la volée:
Avec le comparateur par défaut fourni par java 8 quand aucun argument n'est passé à sorted ():
Si vous souhaitez trier la même liste dans l'ordre inverse:
Si votre liste est une liste d'objets définis par l'utilisateur, alors:
Création d'un comparateur à la volée:
Utilisation de la méthode Comparator.comparingLong () (Nous avons aussi les méthodes compareDouble (), compareInt ()):
Utilisation de la méthode Comparator.comparing () (méthode générique qui compare en fonction de la méthode getter fournie):
Nous pouvons également faire du chaînage en utilisant la méthode thenComparing ():
Classe de personne
la source
Comparator.comparing*
est la meilleure approche et plus orientéeCela semble fonctionner correctement:
Exemple d'entrée / sortie
Êtes-vous sûr de ne pas vérifier la liste au lieu de
sortedList
[dans l'exemple ci-dessus], c'est-à-dire que vous stockez le résultat destream()
dans un nouvelList
objet et que vous vérifiez cet objet?la source
**** Ceci est utile pour trier les objets cartographiques imbriqués comme Carte> ici, j'ai trié en fonction du prix de l'objet Item.
la source
Voici un exemple simple:
Il est possible que votre IDE n'obtienne pas le jdk 1.8 ou la version supérieure pour compiler le code.
Définissez la version Java 1.8 pour Votre_Projet > propriétés> Facettes du projet> Java version 1.8
la source