必须partitioningBy生成一个包含true和false条目的地图?

partitioningBy收集器将谓词应用于流中的每个元素,并生成从布尔到满足或不满足谓词的流中元素列表的映射。 例如:

Stream.of(1,2,3,4).collect(partitioningBy(x -> x >= 3)) // {false=[1, 2], true=[3, 4]} 

正如分区的目的是什么所讨论的 , 观察到的行为是partitioningBy总是返回一个包含truefalse条目的映射。 例如:

 Stream.empty().collect(partitioningBy(x -> false)); // {false=[], true=[]} Stream.of(1,2,3).collect(partitioningBy(x -> false)); // {false=[1, 2, 3], true=[]} Stream.of(1,2,3).collect(partitioningBy(x -> true)); // {false=[], true=[1, 2, 3]} 

这种行为实际上是在某处指定的吗? Javadoc只说:

返回一个Collector,它根据Predicate对输入元素进行分区,并将它们组织成Map<Boolean, List> 。 返回的Map的类型,可变性,可序列化或线程安全性无法保证。

符合实现可以返回这些:

 Stream.empty().collect(partitioningBy(x -> false)); // {}, or {false=[]}, or {true=[]} Stream.of(1,2,3).collect(partitioningBy(x -> false)); // {false=[1, 2, 3]} Stream.of(1,2,3).collect(partitioningBy(x -> true)); // {true=[1, 2, 3]} 

相应的JSR 335似乎只包含相同的文档,但没有关于地图将包含哪些条目的额外讨论。

在该方法的Java 9 Javadoc中 ,有一个澄清,使其更明确:

返回的Map始终包含false和true键的映射。