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

Java Stream 流式操作举例


🚀 Java Stream 流式操作实战示例

1. 基础示例:过滤、映射、收集

List<String> fruits = List.of("apple", "banana", "cherry", "avocado");List<String> result = fruits.stream().filter(f -> f.startsWith("a"))   // 过滤出 a 开头.map(String::toUpperCase)         // 转大写.toList();                        // 收集到 ListSystem.out.println(result); // [APPLE, AVOCADO]

2. Map 流式操作:找出成绩优秀的同学

Map<String, Integer> scores = Map.of("Tom", 90, "Jerry", 80, "Anna", 95);List<String> topStudents = scores.entrySet().stream().filter(e -> e.getValue() > 85)      // 过滤成绩 > 85.map(Map.Entry::getKey)              // 提取姓名.toList();System.out.println(topStudents); // [Tom, Anna]

3. 排序与去重

List<Integer> numbers = List.of(5, 3, 9, 1, 3, 5);List<Integer> result = numbers.stream().distinct()                          // 去重.sorted()                            // 排序.toList();System.out.println(result); // [1, 3, 5, 9]

4. 聚合计算:reduce

List<Integer> numbers = List.of(1, 2, 3, 4, 5);// 求和
int sum = numbers.stream().reduce(0, Integer::sum);System.out.println(sum); // 15

5. 分组统计:groupingBy

List<String> words = List.of("apple", "ant", "banana", "bat", "cherry");Map<Character, List<String>> grouped = words.stream().collect(Collectors.groupingBy(w -> w.charAt(0))); // 按首字母分组System.out.println(grouped);
// {a=[apple, ant], b=[banana, bat], c=[cherry]}

6. 统计操作

List<Integer> numbers = List.of(10, 20, 30, 40);IntSummaryStatistics stats = numbers.stream().mapToInt(Integer::intValue).summaryStatistics();System.out.println(stats.getCount()); // 4
System.out.println(stats.getSum());   // 100
System.out.println(stats.getAverage());// 25.0

7. 扁平化 flatMap

List<List<String>> nested = List.of(List.of("a", "b"),List.of("c", "d", "e")
);List<String> flat = nested.stream().flatMap(List::stream)   // 展平成单一流.toList();System.out.println(flat); // [a, b, c, d, e]

8. 文件流式处理(行处理)

try (Stream<String> lines = Files.lines(Path.of("data.txt"))) {long count = lines.filter(line -> line.contains("error")).count();System.out.println("包含 error 的行数: " + count);
} catch (IOException e) {e.printStackTrace();
}

9. 无限流:生成数据流

List<Integer> first10Even = Stream.iterate(0, n -> n + 2) // 从0开始,每次+2.limit(10)                                        // 取前10个.toList();System.out.println(first10Even); // [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

10. 并行流:加速处理大集合

List<Integer> numbers = IntStream.range(1, 1_000_000).boxed().toList();long count = numbers.parallelStream()  // 并行流.filter(n -> n % 2 == 0).count();System.out.println("偶数个数: " + count); // 500000

✨ 总结

  • 集合流stream(),常用 filter/map/sorted/distinct
  • Map流:从 entrySet()/keySet()/values() 开始
  • 聚合统计reduceCollectors.groupingBysummaryStatistics
  • 文件流Files.lines(),边读边处理,避免内存爆炸
  • 无限流Stream.iterate/generate,适合模拟数据流
  • 并行流parallelStream(),多核加速大数据处理

http://www.xdnf.cn/news/1455787.html

相关文章:

  • 深度学习篇---SENet
  • AI安全必修课:模型偏见检测与缓解实战
  • 使用 Sentry 为 PHP 和 Web 移动小程序提供多平台错误监控
  • 温湿度监控的科技之处是能够将样本的运行数据以数字化的方式展现在管理者面前吗?
  • UE5 UAT
  • iSCSI IP-SAN 部署实战
  • SMARTGRAPHQA —— 基于多模态大模型的PDF 转 Markdown方法和基于大模型格式校正方法
  • 滑动窗口题目:水果成篮
  • C 盘清理技巧分享:释放磁盘空间,提升系统性能
  • ArcGIS学习-15 实战-建设用地适宜性评价
  • 适应新环境:Trae编辑器下的IDEA快捷键定制
  • 解密大语言模型推理:Prompt Processing 的内存管理与计算优化
  • C++语言编程规范-常量
  • 既“强悍”又“灵活”,部署在用户身边,将直播延迟压缩至毫秒级
  • Kafka 学习教程:从基础概念到实践操作
  • 分析流程自动优化!Fabarta个人专属智能体「数据分析」新功能介绍
  • 打工人日报#20250904
  • docker中的mysql变更宿主机映射端口
  • 以StarRocks为例讲解MPP架构和列式存储
  • vscode launch.json 中使用 cmake tools 扩展的命令获取可执行文件目标文件名
  • 设计师的私有化远程协作解决方案,是OpenUI与cpolar组合的标配功能
  • 目标检测系列-Yolov5下载及运行
  • 深度学习下的单阶段通用目标检测算法研究综述2.0
  • Java全栈工程师的实战面试:从Vue到Spring Boot的技术旅程
  • PSU电源原理
  • 双指针扫描使用简述
  • 【AI论文】面向大语言模型(LLMs)的具身强化学习全景图:一项调研综述
  • 新闻稿的发布平台有哪些?选对渠道让发稿效果事半功倍!
  • 移远EC200A OpenCPU笔记
  • 一文吃透同态滤波算法!从原理到 MATLAB 实战,小白也能懂