Ich versuche, einen Stream nach einer bestimmten Reihenfolge von einem seiner Felder zu sortieren.Sortieren Java Stream wie Schalter konditional
Jetzt erreiche ich dies, indem ich Streams in eine Liste umwandle und einen Schalter benutze und sie dann wieder in eine Liste in der gewünschten Reihenfolge bringe.
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);
Ich frage mich, ob es irgendeine Änderung ist dies mit Strom sortierte Methode und mit einem benutzerdefinierten Komparator oder etwas ähnliches zu erreichen.
Vielen Dank im Voraus.
'Collectors.groupingBy (Fruit :: getName)' würde die Früchte nach Namen gruppieren, wie im Schalter. Du könntest dann die 'addAll's so machen. –
Erstellen einer Hilfsklasse kann Ihnen entsprechende Liste geben: fruitHelper.getList (fruit.getName) –
Beachten Sie, dass Ihre aktuelle Logik seltsam ist. Nehmen wir an, Sie haben zwei von jeder Art von Frucht: Ihre resultierende 'genericFruitList' wäre orange, Apfel, Wassermelone, andere, andere, Wassermelone, Apfel, Orange. Soll der Einfügepunkt angegeben werden, oder möchten Sie sie am Ende hinzufügen? –