+1 I was tempted to saying something more about an associated value if it was not operated on (accumulated and combined), but that’s probably api note territory.
Paul. > On 8 Dec 2016, at 14:48, Stuart Marks <stuart.ma...@oracle.com> wrote: > > Hi all, > > Please review this small spec change to the Collectors.partitioningBy() > methods, appended below. This collector returns Map<Boolean, Something>. The > change requires the implementation always to populate the returned map with > entries for both false and true keys. > > The implementation already does this; the entries are initially populated > with values obtained by calling the supplier of the downstream collector. > > The reason for this spec change that it's useful for applications to be able > to rely on this. The spec is currently silent about what entries will be > present in the map. If one or the other (or both!) of the entries can be > absent, callers would have to defend against this possibility. For example, > > Map<Boolean, List<V>> map = stream.collect(partitioningBy(pred)); > processResults(map.getOrDefault(false, List.of()), > map.getOrDefault(true, List.of())); > > With the guarantee, it's safe instead to write: > > Map<Boolean, List<V>> map = stream.collect(partitioningBy(pred)); > processResults(map.get(false), map.get(true)); > > In fact, this code works today, it's just that it's not specified to work. It > should be. > > Thanks, > > s'marks > > > > diff -r 7583c87dfe7c > src/java.base/share/classes/java/util/stream/Collectors.java > --- a/src/java.base/share/classes/java/util/stream/Collectors.java Thu Dec > 08 21:21:39 2016 +0000 > +++ b/src/java.base/share/classes/java/util/stream/Collectors.java Thu Dec > 08 14:39:31 2016 -0800 > @@ -1268,6 +1268,8 @@ > * to a {@code Predicate}, and organizes them into a > * {@code Map<Boolean, List<T>>}. > * > + * The returned {@code Map} always contains mappings for both > + * {@code false} and {@code true} keys. > * There are no guarantees on the type, mutability, > * serializability, or thread-safety of the {@code Map} or {@code List} > * returned. > @@ -1290,7 +1292,10 @@ > * {@code Map<Boolean, D>} whose values are the result of the downstream > * reduction. > * > - * <p>There are no guarantees on the type, mutability, > + * <p> > + * The returned {@code Map} always contains mappings for both > + * {@code false} and {@code true} keys. > + * There are no guarantees on the type, mutability, > * serializability, or thread-safety of the {@code Map} returned. > * > * @param <T> the type of the input elements