Zum Beispiel ist, wenn ich einige Elemente partitionieren möchten, ich so etwas tun konnte:Was den Zweck der partitioningBy
Stream.of("I", "Love", "Stack Overflow")
.collect(Collectors.partitioningBy(s -> s.length() > 3))
.forEach((k, v) -> System.out.println(k + " => " + v));
die Ausgänge:
false => [I]
true => [Love, Stack Overflow]
Aber für mich partioningBy
ist nur ein Unterfall von groupingBy
. Obwohl Ersterer einen Predicate
als Parameter akzeptiert, während der Letztere ein Function
ist, sehe ich nur eine Partition als eine normale Gruppierungsfunktion.
Also der gleiche Code tut genau das Gleiche:
Stream.of("I", "Love", "Stack Overflow")
.collect(Collectors.groupingBy(s -> s.length() > 3))
.forEach((k, v) -> System.out.println(k + " => " + v));
, die auch in einem Map<Boolean, List<String>>
führt.
Also gibt es einen Grund, warum ich partioningBy
statt groupingBy
verwenden sollte? Danke
Dies ist das vernünftigste Verhalten, aber Ich sehe keine Garantie für zwei Einträge in den Javadocs. Ich habe eine Frage dazu unter http://stackoverflow.com/questions/41287517/must-partitioningby-produce-a-map-with-entries-for-true-and-false gestellt. –
@JoshuaTaylor Danke für die Info! Ich aktualisierte die Antwort, um die Informationen aus dem anderen Thread aufzunehmen. – Oron