gpt4 book ai didi

java - partitioningBy的目的是什么

转载 作者:IT老高 更新时间:2023-10-28 21:14:14 24 4
gpt4 key购买 nike

例如,如果我打算对一些元素进行分区,我可以这样做:

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 的子情况.虽然前者接受 Predicate作为参数,而后者是 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将始终返回一个包含两个条目的映射,一个用于谓词为真,另一个用于谓词为假。两个条目可能都有空列表,但它们会存在。

那是 groupingBy不会,因为它只在需要时创建条目。

在极端情况下,如果您将空流发送到 partitioningBy您仍然会在 map 中获得两个条目,而 groupingBy将返回一个空 map 。

编辑:正如下面提到的,Java 文档中没有提到这种行为,但是改变它会带走附加值 partitioningBy目前正在提供。对于 Java 9,这已经在规范中。

关于java - partitioningBy的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27993604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com