加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 分区的目的是什么

发布时间:2020-12-14 05:14:14 所属栏目:Java 来源:网络整理
导读:例如,如果我打算分割一些元素,我可以做一些像: 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]
例如,如果我打算分割一些元素,我可以做一些像:
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只是一个groupBy的子案例.虽然前者接受一个谓词作为参数,而后者接受一个函数,但我只是看到一个分区作为一个正常的分组函数.

所以同样的代码完全一样:

Stream.of("I","Stack Overflow")
       .collect(Collectors.groupingBy(s -> s.length() > 3))
       .forEach((k,v) -> System.out.println(k + " => " + v));

这也导致Map< Boolean,List< String>>.

那么有什么理由我应该使用partioningBy而不是groupBy吗?谢谢

解决方法

partitioningBy将始终返回一个带有两个条目的映射,一个用于谓词为true,另一个为false.
两个条目都可能有空列表,但它们将存在.

这是groupsBy不会做的,因为它只在需要时创建条目.

在极端情况下,如果您发送一个空流到partitionBy,您仍然会在地图中获得两个条目,而groupingBy将返回一个空的地图.

编辑:如下所述,Java文档中没有提及此行为,但是更改它将会消除partitionBy当前提供的附加值.对于Java 9,这已经在规范中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读