当前位置: 首页 > news >正文

312. Java Stream API - 使用收集器进行计数操作

文章目录

  • 312. `Java Stream API` - 使用收集器进行计数操作
    • ✅ **计数操作**
      • 示例:使用 `count()` 和 `Collectors.counting()` 进行计数
        • 使用 `count()` 方法:
        • 使用 `Collectors.counting()`:
      • 运行结果:
      • **为什么要使用 `Collectors.counting()`?**
        • 组合多个收集器的示例:
      • 运行结果:
    • ✅ **小结**

312.Java Stream API- 使用收集器进行计数操作

Java Stream API中,Collectors工厂类提供了许多方便的方法,可以用于将流中的元素收集到不同的数据结构中。除了常见的收集器(如toList()toSet())之外,Collectors还提供了其他功能性的收集器,其中之一是Collectors.counting(),它用于统计流中元素的数量。

Collectors.counting()的作用与调用流的count()方法类似,但使用收集器的方式提供了更灵活的组合能力,尤其在需要与其他收集器一起使用时非常有用。这一点将在下一节关于收集到Map中的内容中详细介绍。

计数操作

Collectors.counting()用于统计流中元素的数量。与直接使用stream.count()方法效果相同,但在组合多个收集器时,counting()提供了更好的灵活性。

示例:使用count()Collectors.counting()进行计数

使用count()方法:
Collection<String>strings=List.of("one","two","three");longcount=strings.stream().count();System.out.println("count = "+count);
使用Collectors.counting()
Collection<String>strings=List.of("one","two","three");longcountWithACollector=strings.stream().collect(Collectors.counting());System.out.println("countWithACollector = "+countWithACollector);

运行结果:

count=3countWithACollector=3

这两个代码片段的功能是一样的,都返回了流中元素的数量。count()方法直接返回结果,而Collectors.counting()是通过收集器的方式来实现的。尽管实现方式不同,但最终的结果相同,都是返回流中元素的数量。

为什么要使用Collectors.counting()

虽然count()方法本身已经足够简单直接,但在某些情况下,尤其是当你需要组合多个收集器时,Collectors.counting()更加有用。例如,在将流中的元素按照某些条件分组或进行归类时,你可能希望同时获取每组的元素数量。此时,Collectors.counting()与其他收集器(如groupingBy())结合使用可以提供非常强大的功能。

组合多个收集器的示例:

假设你想要统计每个单词在列表中出现的次数,并按字母分组:

Map<Character,Long>wordCountByFirstLetter=strings.stream().collect(Collectors.groupingBy(s->s.charAt(0),Collectors.counting()));System.out.println("wordCountByFirstLetter = "+wordCountByFirstLetter);

运行结果:

wordCountByFirstLetter={o=1,t=2}

在这个示例中,我们首先按单词的首字母进行分组,然后使用Collectors.counting()来统计每个字母对应的单词数量。通过组合收集器,我们可以实现复杂的统计需求。

小结

  1. Collectors.counting()count()方法:这两者都可以用来计算流中的元素数量,效果相同,但Collectors.counting()在与其他收集器组合使用时更加灵活。
  2. 组合收集器的应用:当需要将流中的元素按照某些规则进行分组或归类时,Collectors.counting()是一个非常有用的工具。
  3. 灵活性:通过Collectors.counting(),你可以在复杂的收集操作中轻松地获取元素数量,而不仅仅是简单的计数操作。

Collectors.counting()是一个非常有用的收集器,尤其在你需要处理多个收集器并进行组合操作时,它能够与其他收集器协同工作,提供更强大的功能。

http://www.jsqmd.com/news/338713/

相关文章:

  • 【强烈推荐】大模型开发者必看:AI智能体90%是软件工程,10%是AI的真相
  • UltraRAG 3.0开源:可视化RAG推理全链路,小白也能快速上手大模型开发
  • 构建高性能车型识别与计数全栈系统——YOLOv5/v8/v10实战详解
  • 基于YOLO系列的行人车辆检测与计数系统:从理论到实践
  • Claude Code安装与初始化
  • 深度解析 ARP 欺骗攻击:原理 + 实操 + 防御,小白也能轻松上手
  • 收藏!小白也能看懂的大模型术语全解析:从GGUF到Reranker,一文搞懂本地RAG系统
  • MATLAB Simulink教程及模型
  • 渗透测试实战核心:ARP 欺骗攻击(ARP 断网攻击)全流程实操指南
  • 树形DP扩展
  • 2026Q1苏州财税公司排名|资质合规为核心,代理记账按场景选更靠谱 - 品牌智鉴榜
  • 2026 年最新成都公墓代理商五大推荐 专业合规选墓不踩坑 - 深度智识库
  • 破界与共生:HarmonyOS原生应用生态全景图谱与PC时代三重变局
  • 02. 神经网络
  • 10岁小学生自制28元望远镜观察月球
  • 利用多种方法实现SQL行列转换
  • 从欲望、客观到自感:D-O-S模型——一种文明互鉴与数字治理的认知元语言(全)
  • 您已消耗一次 CSP-S 参加机会
  • 夹具状态识别与分类——基于YOLO11-EfficientHead的目标检测实现与性能分析
  • 【读书笔记】《忙碌爸爸也能做好爸爸》
  • 计算机毕设Java基于协同过滤的网上书店推荐系统 基于Java协同过滤算法的在线书店个性化推荐系统设计与实现 Java环境下基于协同过滤的网络书店智能推荐系统研究与开发
  • WPF PGP 2026 R1 线上复刻
  • 毕业设计 深度学习异常流量检测系统(算法+论文)
  • 学习进度 18
  • C++函数进阶:默认参数与函数重载,让你的代码更智能!
  • 生成函数的第一部分
  • 函数探幽(默认参数和函数重载)
  • No143:AI中国故事-对话张载——气本论与AI存在:太虚即气、民胞物与与天人合一
  • 【实操指南】ARP 欺骗攻击:从原理到实战,网络安全小白必看!
  • 霍尔电流传感器在新能源汽车中的应用探讨