J'essaie de trier un flux par un ordre spécifique par l'un de ses champs.Trier Java comme commutateur de type conditionnel
Maintenant, je suis parvenir en convertissant les flux à la liste et à l'aide d'un commutateur, puis les rejoindre dans une liste dans l'ordre souhaité.
fruits.forEach(fruit -> { switch (fruit.getName()) { case "Orange": orangesList.add(fruit); break; case "Apple": applesList.add(fruit); break; case "WaterMelon": watermelonList.add(fruit); break; default: otherFruits.add(fruit); break; } }); genericFruitList.addAll(0, orangeList); genericFruitList.addAll(1, applesList); genericFruitList.addAll(2, watermelonList); genericFruitList.addAll(3, otherFruits);
Je me demande s'il y a un changement pour obtenir ce flux en utilisant la méthode triés et en utilisant un comparateur personnalisé ou quelque chose comme ça.
Merci d'avance.
'Collectors.groupingBy (Fruit :: getName)' regrouperait les fruits par leur nom, comme dans le commutateur. Vous pourriez alors faire le 'addAll's comme ceci. –
La création d'une classe d'aide peut vous donner la liste appropriée: fruitHelper.getList (fruit.getName) –
Notez que votre logique actuelle est étrange. Disons que vous avez deux de chaque type de fruit: votre «genericFruitList» résultant serait «orange, pomme, pastèque, autre, autre, pastèque, pomme, orange». Voulez-vous spécifier le point d'insertion, ou avez-vous l'intention de tout ajouter à la fin? –