news 2026/4/18 9:39:24

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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()是一个非常有用的收集器,尤其在你需要处理多个收集器并进行组合操作时,它能够与其他收集器协同工作,提供更强大的功能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:43:30

AI原生应用:图像相似度匹配的深度学习方案

AI原生应用&#xff1a;图像相似度匹配的深度学习方案 关键词&#xff1a;图像相似度匹配、深度学习、特征提取、度量学习、对比学习、嵌入向量、Siamese网络 摘要&#xff1a;本文从“找相似图片”的日常需求出发&#xff0c;系统讲解基于深度学习的图像相似度匹配技术。我们将…

作者头像 李华
网站建设 2026/4/18 7:36:52

构建高性能车型识别与计数全栈系统——YOLOv5/v8/v10实战详解

摘要在智能交通管理、智慧城市建设及商业停车场运营中&#xff0c;车型识别与车辆计数是两项至关重要的计算机视觉任务。传统方法受限于复杂场景的鲁棒性&#xff0c;而深度学习&#xff0c;尤其是以YOLO (You Only Look Once) 系列为代表的单阶段目标检测算法&#xff0c;凭借…

作者头像 李华
网站建设 2026/4/17 17:51:08

收藏!大模型从入门到精通:LLM、Transformer、Agent等核心概念全解析

目录 1 LLM (大语言模型) 2 Transformer (自注意力机制) 3 Prompt (提示词) 4 理解API 5 Function Calling (函数调用) 6 Agent (智能体) 7 MCP (模型上下文协议) 8 A2A (Agent通信协议) 9 未来假想 本文尽量用最简单的方式, 帮读者理解 LLM, Transformer, Prompt, Function ca…

作者头像 李华
网站建设 2026/4/18 6:59:13

Vue3 + TypeScript + el-input 处理金额输入(只能输入数字、负号和小数点,最多两位小数,不能0开头,不能小数点开头,只能开头输入负号,只能输入一次负号和小数点,不支持.01)

方法1&#xff1a;oninput 原生事件 代码&#xff1a;复杂的正则表达式代码 <!-- 方法1&#xff1a;oninput 原生事件&#xff0c;复杂的正则表达式代码 --><el-inputv-model"localCapitalInfo.capitalTotal"oninput"valuevalue.replace(/[^\d.-]/g, …

作者头像 李华