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似乎只包含相同的文档,但没有关于地图将包含哪些条目的其他讨论。