Stream API使用
创建的方式
①通过集合
②通过数组
③通过Stream的of()
Stream 自己不会存储元素
Stream 不会改变源对象,会返回一个持有结果的新Stream
Stream 操作时延迟执行的,等到需要结果的时候才执行
一个中间操作链,对数据源的数据进行处理,一旦执行终止操作,就执行中间操作链,并产生结果。之后不会再被使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | public class Student { private int id; private String name; private int age; public Student() { } public Student(String name) { this .name = name; } public Student( int id, String name, int age) { this .id = id; this .name = name; this .age = age; } public int getId() { return id; } public void setId( int id) { this .id = id; } public String getName() { return name; } public void setName(String name) { this .name = name; } public int getAge() { return age; } public void setAge( int age) { this .age = age; } public static List<Student> getStuList(){ List<Student> list = new ArrayList<>(); list.add( new Student( 1001 , "aa" , 10 )); list.add( new Student( 1002 , "bb" , 20 )); list.add( new Student( 1003 , "cc" , 30 )); list.add( new Student( 1004 , "dd" , 40 )); list.add( new Student( 1005 , "ee" , 50 )); return list; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\ '' + ", age=" + age + '}' ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | @Test public void test(){ List<Student> stuList = Student.getStuList(); Stream<Student> stream = stuList.stream(); stream.filter(stu -> stu.getAge()> 20 ).forEach(System.out::println); //返回年龄>20的Student对象集合 List<Student> list = stuList.stream().filter(stu -> stu.getAge() > 20 ).collect(Collectors.toList()); System.out.println(list); //返回name集合 List<String> nameList = stuList.stream().map(stu -> stu.getName()).collect(Collectors.toList()); System.out.println(nameList); //[aa, bb, cc, dd, ee] } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | @Test public void test2(){ List<String> list = Arrays.asList( "dd" , "bb" , "aa" , "cc" , "ee" ); List<String> list2 = list.stream().sorted().collect(Collectors.toList()); System.out.println(list2); //[aa, bb, cc, dd, ee] List<String> list3 = list.stream().sorted( new Comparator<String>() { @Override public int compare(String o1, String o2) { return -o1.compareTo(o2); } }).collect(Collectors.toList()); System.out.println(list3); //[ee, dd, cc, bb, aa] List<String> list4 = list.stream().sorted((a,b) -> a.compareTo(b)).collect(Collectors.toList()); System.out.println(list4); //[aa, bb, cc, dd, ee] List<String> list5 = list.stream().sorted(String::compareTo).collect(Collectors.toList()); System.out.println(list5); //[aa, bb, cc, dd, ee] Student stu1 = new Student( 1 , "aa" , 10 ); Student stu2 = new Student( 4 , "bb" , 20 ); Student stu3 = new Student( 2 , "cc" , 30 ); Student stu4 = new Student( 3 , "dd" , 40 ); Student stu5 = new Student( 5 , "ee" , 50 ); List<Student> stuList = new ArrayList<>(); stuList.add(stu1); stuList.add(stu2); stuList.add(stu3); stuList.add(stu4); stuList.add(stu5); List<Student> stuList2 = stuList.stream().sorted((s1, s2) -> Integer.compare(s1.getId(), s2.getId())).collect(Collectors.toList()); System.out.println(stuList2); //[Student{id=1, name='aa', age=10}, Student{id=2, name='cc', age=30}, Student{id=3, name='dd', age=40}, Student{id=4, name='bb', age=20}, Student{id=5, name='ee', age=50}] } |
1 2 3 4 5 6 7 8 9 | @Test public void test3(){ List<Student> stuList = Student.getStuList(); Optional<Integer> sum = stuList.stream().map(stu -> stu.getAge()).reduce((t1, t2) -> t1 + t2); System.out.println(sum); //Optional[150] 所有员工age之和 Optional<Integer> sum2 = stuList.stream().map(stu -> stu.getAge()).reduce(Integer::sum); System.out.println(sum2); //Optional[150] } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?