Ich arbeite mit Sammlern SammyBy und partitioningBy Funktionen. Ich eine Arbeit mit einer Liste von Personen, die Liste der Personen wie folgt:Nicht in der Lage, die gewünschte Ausgabe zu erhalten, während ich mit PartioningBy und groupingBy zusammenarbeite
List<Person> persons =
Arrays.asList(
new Person("Max", 18),
new Person("Peter", 23),
new Person("Pamela", 23),
new Person("David", 12),
new Person("Pam", 12));
Was ich will, ist die Liste auf der Grundlage von Personen, dessen Namen beginnt mit dem Buchstaben „P“ und auf dann die Gruppe partitionieren die Grundlage ihres Alters. Hier ist mein Code, die die obige Filtration tut:
Map<Boolean, Map<Object, List<Person>>> rr = persons.stream()
.collect(Collectors.partitioningBy(p -> p.name.startsWith("P"),
Collectors.groupingBy(p -> p.age > 20)));
Und die Ausgabe, die ich habe ist:
rr = {false={false=[Max, David]}, true={false=[Pam], true=[Peter, Pamela]}}
Nun, meine Forderung ist nur interne Karte aus den obigen Ergebnissen zu erhalten. Das heißt, ich will die Rückgabewerte ändern:
{false=[Pam], true=[Peter, Pamela]}
Das heißt, ich die Ergebnisse (oder partitionierten Karte) wollen deren boolean Wert gilt als durch die partioningBy Funktion zurückgegeben. Wie kann ich das erreichen?
* Warum * willst du das? Mach einfach einen 'filter (p -> p.name.startsWith (" P "))' * vor * '.collect (Collectors.groupingBy (p -> p.age> 20))' '. Andernfalls, wenn Sie Daten sammeln möchten, die Sie danach nicht verwenden, tun Sie einfach wie in Ihrer Frage gepostet und rufen Sie 'get (true)' auf dem Ergebnis auf. – Holger
Nicht spezifisch für den Grund. Ich sehe nur nach, ob es ein bestimmtes Szenario gibt. – KayV
Nun, Sie können vorher filtern oder extrahieren. Beides ist einfach. Was hast du noch vor? – Holger