Per esempio, se ho intenzione di dividere alcuni elementi, avrei potuto fare qualcosa di simile:Qual è lo scopo di partitioningBy
Stream.of("I", "Love", "Stack Overflow")
.collect(Collectors.partitioningBy(s -> s.length() > 3))
.forEach((k, v) -> System.out.println(k + " => " + v));
quali uscite:
false => [I]
true => [Love, Stack Overflow]
Ma per me partioningBy
è solo una subcase di groupingBy
. Anche se il primo accetta un parametro Predicate
mentre il secondo è un Function
, vedo solo una partizione come una normale funzione di raggruppamento.
Così lo stesso codice fa esattamente la stessa cosa:
Stream.of("I", "Love", "Stack Overflow")
.collect(Collectors.groupingBy(s -> s.length() > 3))
.forEach((k, v) -> System.out.println(k + " => " + v));
che si traduce anche in un Map<Boolean, List<String>>
.
Quindi c'è qualche ragione per cui dovrei usare partioningBy
invece di groupingBy
? Grazie
Questo è il comportamento più ragionevole, ma Non vedo la garanzia per due voci in javadocs. Ho fatto una domanda al riguardo su http://stackoverflow.com/questions/41287517/must-partitioningby-produce-a-map-with-entries-for-true-and-false. –
@JoshuaTaylor Grazie per le informazioni! Ho aggiornato la risposta per includere le informazioni dall'altro thread. – Oron