)
这节课学Stream 流Java 8 最强大的集合处理工具 告别繁琐的循环一行代码实现过滤、排序、求和、去重、统计代码优雅又高效一、完整可运行代码直接复制javaimport java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; public class JavaLesson18 { public static void main(String[] args) { // 1. 创建一个学生集合数据源 ListStudent list new ArrayList(); list.add(new Student(小明, 18, 85)); list.add(new Student(小红, 17, 92)); list.add(new Student(小刚, 19, 78)); list.add(new Student(小美, 18, 95)); list.add(new Student(小亮, 17, 65)); System.out.println( 1. 过滤找出成绩 80 的学生 ); list.stream() .filter(s - s.getScore() 80) // 过滤条件 .forEach(System.out::println); // 遍历打印 System.out.println(\n 2. 排序按成绩从高到低排序 ); list.stream() .sorted(Comparator.comparing(Student::getScore).reversed()) // 排序 .forEach(System.out::println); System.out.println(\n 3. 映射只获取所有学生的姓名 ); list.stream() .map(Student::getName) // 提取姓名 .forEach(name - System.out.print(name )); System.out.println(\n\n 4. 统计求平均分 ); double avg list.stream() .mapToInt(Student::getScore) // 转为分数流 .average() // 求平均 .getAsDouble(); System.out.println(平均分 avg); System.out.println(\n 5. 收集把结果转成新集合 ); ListStudent highScoreList list.stream() .filter(s - s.getScore() 90) .collect(Collectors.toList()); highScoreList.forEach(s - System.out.println(s.getName() 是高分)); } } // 学生类 class Student { private String name; private int age; private int score; // 构造方法 public Student(String name, int age, int score) { this.name name; this.age age; this.score score; } // getter、setter public String getName() { return name; } public int getAge() { return age; } public int getScore() { return score; } // 重写toString方便打印 Override public String toString() { return 姓名 name , 年龄 age , 分数 score; } }二、运行结果plaintext 1. 过滤找出成绩 80 的学生 姓名小明, 年龄18, 分数85 姓名小红, 年龄17, 分数92 姓名小美, 年龄18, 分数95 2. 排序按成绩从高到低排序 姓名小美, 年龄18, 分数95 姓名小红, 年龄17, 分数92 姓名小明, 年龄18, 分数85 姓名小刚, 年龄19, 分数78 姓名小亮, 年龄17, 分数65 3. 映射只获取所有学生的姓名 小明 小红 小刚 小美 小亮 4. 统计求平均分 平均分83.0 5. 收集把结果转成新集合 小红 是高分 小美 是高分三、核心知识点新手必背1. Stream 流是什么一个对集合进行高效操作的工具不是集合不存数据专门用来处理数据查询、过滤、计算2. 三大操作步骤获取流集合.stream()中间操作filter、sorted、map、limit...可以链式调用终结操作forEach、collect、count、average...执行后流关闭3. 最常用 5 大方法filter(条件)→ 过滤留下符合条件的数据sorted(排序规则)→ 排序map(提取规则)→ 提取 / 转换数据如只拿姓名forEach()→ 遍历collect(Collectors.toList())→ 把结果转回新集合4. 最大好处不用写 for 循环代码简洁、优雅、易读效率高支持大数据量处理四、记忆口诀集合转流一行码过滤排序随便耍映射提取想要的终结操作搞定它