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

时间:2016-12-22 16:19:19

标签: java java-8 language-lawyer java-stream

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

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

正如What's the purpose of partitioningBy中所讨论的,观察行为是 partitioningBy 始终返回包含 true 和<的条目的地图强>假即可。 E.g:

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只说:

  

返回一个收集器,它根据a分区输入元素   谓词,并将它们组织成Map<Boolean, List<T>>。有   不保证类型,可变性,可序列性或   返回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似乎只包含相同的文档,但没有关于地图将包含哪些条目的其他讨论。

1 个答案:

答案 0 :(得分:15)

Java 9 Javadoc of the method中,有一个澄清说明更明确:

  

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