Java中List的Stream常见使用方法
1、基础类
package com.my.test; public class Student { // 名称 private String name; // 性别 private String gender; // 年龄 private Integer age; public Student() { } public Student(String name, String gender, Integer age) { this.name = name; this.gender = gender; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", gender='" + gender + '\'' + ", age=" + age + '}'; } }
2、测试类
package com.my.test; import java.util.ArrayList; import java.util.IntSummaryStatistics; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import static java.util.stream.Collectors.averagingInt; import static java.util.stream.Collectors.partitioningBy; public class ListStream { public static void main(String[] args) { // 测试数据 List<Student> list = new ArrayList<>(); list.add(new Student("李明", "男", 18)); list.add(new Student("李飞", "男", 17)); list.add(new Student("张丽", "女", 17)); list.add(new Student("张艳", "女", 20)); list.add(new Student("王朋", "男", 18)); list.add(new Student("陈晴", "女", 18)); list.add(new Student("王菲", "女", 19)); list.add(new Student("李雷", "男", 20)); // 查找性别为男的学生 List<Student> boys = list.stream().filter(s -> "男".equals(s.getGender())).collect(Collectors.toList()); System.out.println("1、查找性别为男的学生:"); System.out.println(boys.toString()); // 查找性别为女的学生 List<Student> girls = list.stream().filter(s -> "女".equals(s.getGender())).collect(Collectors.toList()); System.out.println("2、查找性别为女的学生:"); System.out.println(girls.toString()); // map的key值true为男,false为女的集合 Map<Boolean, List<Student>> map1 = list.stream().collect(partitioningBy(student -> "男".equals(student.getGender()))); System.out.println("3、map的key值true为男,false为女的集合:"); System.out.println(map1); // 求性别为男的学生总岁数 int sum = list.stream().filter(s -> "男".equals(s.getGender())).mapToInt(Student::getAge).sum(); System.out.println("4、求性别为男的学生总岁数:"); System.out.println(sum); // 按性别进行分组统计人数 Map<String, Integer> map2 = list.stream().collect(Collectors.groupingBy(Student::getGender, Collectors.summingInt(p -> 1))); System.out.println("5、按性别进行分组统计人数:"); System.out.println(map2); // 按性别进行分组统计各组 Map<String, List<Student>> map3 = list.stream().collect(Collectors.groupingBy(Student::getGender)); System.out.println("6、按性别进行分组统计各组:"); System.out.println(map3); // 判断是否有年龄大于25岁的学生 boolean check = list.stream().anyMatch(student -> student.getAge() > 25); System.out.println("7、判断是否有年龄大于25岁的学生:"); System.out.println(check); // 获取所有学生的姓名集合 List<String> list2 = list.stream().map(Student::getName).collect(Collectors.toList()); System.out.println("8、获取所有学生的姓名集合:"); System.out.println(list2); // 求所有人的平均年龄 double avg = list.stream().collect(averagingInt(Student::getAge)); System.out.println("9、求所有人的平均年龄:"); System.out.println(avg); // 求年龄最大的学生 Student s = list.stream().reduce((student, student2) -> student.getAge() > student2.getAge() ? student : student2).get(); System.out.println("10、求年龄最大的学生:"); System.out.println(s); // 按照年龄从小到大排序 List<Student> list3 = list.stream().sorted((s1, s2) -> s1.getAge().compareTo(s2.getAge())).collect(Collectors.toList()); System.out.println("11、按照年龄从小到大排序:"); System.out.println(list3); // 获取所有的名字,输出一个字符串 String str = list.stream().map(Student::getName).collect(Collectors.joining(",", "[", "]")); System.out.println("12、获取所有的名字,输出一个字符串:"); System.out.println(str); // 获取年龄的最大值、最小值、平均值、求和 IntSummaryStatistics intSummaryStatistics = list.stream().mapToInt(Student::getAge).summaryStatistics(); System.out.println("13、获取年龄的最大值、最小值、平均值、求和:"); System.out.println(intSummaryStatistics); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端