J'ai une liste qui ressemble à ceci: [3: [Produit raisonnable], 5: [Excellent]]
Je souhaite trier (à l'aide de flux) cette liste par le numéro avant :
.
La liste doit ressembler à ceci:
[5: [Excellent], 3: [Produit raisonnable]]
Mon code ressemble à ceci:
return notesForProduct.stream (). sorted (). collect (Collectors.toList ());
Je ne sais pas comment utiliser la fonction lambda ou ce que je dois mettre en paramètre dans sorted ().
4 Réponses :
Si vous pouvez être sûr du format des éléments de la liste, vous pouvez écrire votre propre comparateur:
Collections.sort(ratingsForProduct, (a, b) -> { return Integer.parseInt(b.substring(0, b.indexOf(':'))) - Integer.parseInt(a.substring(0, a.indexOf(':'))); });
Nous utilisons substring (0, indexOf (':')) au lieu de
charAt (0)
pour gérer les valeurs supérieures à 10. Si vous vouliez trier par ordre croissant, vous changeriez le comparateur pour soustraire b de a (au lieu de a de b car il est actuellement).
Vous pouvez transmettre le comparateur a > pour trier par ordre décroissant en extrayant un entier de chaque chaîne ou vous pouvez également utiliser Collections.sort Collections.sort(list,Comparator.<String>comparingInt(s->Integer.parseInt(s.split(":")[0].trim())).reversed());
List<String> sortedList = list.stream()
.sorted(Comparator.<String>comparingInt(s->Integer.parseInt(s.split(":")[0].trim())).reversed())
.collect(Collectors.toList());
[5 : [Great ], 3 : [Reasonable product ]]
Je pense qu'il est inefficace de convertir une chaîne en entier chaque fois que des chaînes sont comparées.
Essayez ceci.
List<String> result = list.stream() .map(string -> Map.entry(Integer.valueOf(string.substring(0, string.indexOf(":")).trim()), string)) .sorted(Comparator.comparing(Entry::getKey, Comparator.reverseOrder())) .map(Entry::getValue) .collect(Collectors.toList());
ou
List<String> result = list.stream() .map(string -> new Object() { int key = Integer.valueOf(string.substring(0, string.indexOf(":")).trim()); String value = string; }) .sorted(Comparator.comparing(obj -> obj.key, Comparator.reverseOrder())) .map(obj -> obj.value) .collect(Collectors.toList());
Voulez-vous dire que vous avez une carte? Ou est-ce que
3: [Produit raisonnable]
est une chaîne?3: [Reasonable product]
est une chaîne