分区的目的是什么
例如,如果我打算对某些元素进行分区,则可以执行以下操作:
Stream.of("I", "Love", "Stack Overflow") .collect(Collectors.partitioningBy(s -> s.length() > 3))
.forEach((k, v) -> System.out.println(k + " => " + v));
输出:
false => [I]true => [Love, Stack Overflow]
但是对我partioningBy
来说只是的一个子案例groupingBy
。尽管前者接受a Predicate
作为参数,而后者接受a
,但Function
我只是将分区视为常规分组功能。
因此,相同的代码执行的操作完全相同:
Stream.of("I", "Love", "Stack Overflow") .collect(Collectors.groupingBy(s -> s.length() > 3))
.forEach((k, v) -> System.out.println(k + " => " + v));
这也导致Map<Boolean, List<String>>
。
那么,有什么理由我应该partioningBy
代替我groupingBy
吗?谢谢
回答:
partitioningBy
会始终返回包含两个条目的映射,一个用于谓词为true的条目,另一个用于为false的条目。两个条目都有可能有空列表,但它们将存在。
那是groupingBy
不会做的,因为它只会在需要时创建条目。
在极端情况下,如果向您发送空流,partitioningBy
您仍将在映射中获得两个条目,而groupingBy
将返回一个空映射。
编辑:如下所述,Java文档中未提及此行为,但是更改它会带走partitioningBy
当前提供的附加值。对于Java 9,这已经在规范中。
以上是 分区的目的是什么 的全部内容, 来源链接: utcz.com/qa/417692.html