Fork me on GitHub

Java Stream API

1. 基本概念

可以声明式方式处理数据集合的流
常用的操作有:过滤、映射、规约等

2.实用总结

2.1.创建

  • 从集合中创建Stream
点击查看代码
        //1. 从集合中构建Stream
        List<String> list = Arrays.asList("a", "b", "c", "d", "e");
        Stream<String> stream = list.stream();
        stream.forEach(System.out::println);
![image](https://img2024.cnblogs.com/blog/696166/202503/696166-20250302222938150-305534500.png)
  • 从数组中构建Stram
点击查看代码
        //2. 从数组中构建Stream
        String[] array = new String[]{"a", "b", "c", "d", "e"};
        Stream<String> stream = Arrays.stream(array);
        stream.forEach(System.out::println);
![image](https://img2024.cnblogs.com/blog/696166/202503/696166-20250302223306837-1932906897.png)
  • 从Streama.of中狗i按Stream
点击查看代码
        //3. 从Stream中构建Stream
        Stream<String> stream = Stream.of("a", "b", "c", "d", "e");
        stream.forEach(System.out::println);
![image](https://img2024.cnblogs.com/blog/696166/202503/696166-20250302223442642-1532929870.png)
  • 创建无限Stream
点击查看代码
       //4. 创建无限Stream
        Stream.iterate(0, n -> n + 3).limit(10).forEach(System.out::println);
![image](https://img2024.cnblogs.com/blog/696166/202503/696166-20250302223710299-394963010.png)

2.2 常规操作

  • 过滤:使用filter过滤满足条件的元素
public class StreamDemo {
 static class Student {
        private String name;
        private int age;

        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;
        }
		        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
private static List<Student> genStudents() {
        List<Student> students = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            Student student = new Student();
            student.setAge(i);
            student.setName("name" + i);
            students.add(student);
        }
        return students;
    }
}

	//1. 过滤
        List<Student> students = genStudents();
        students.stream().filter(student -> student.getAge() > 30).forEach(System.out::println);

-映射:map

       //2. 映射
        List<Student> students = genStudents();
        // 30岁以上的年龄都加10,名字都加上后缀hello
        students.stream().filter(item->item.age>30).map(student -> {
            student.setAge(student.getAge() + 10);
            student.setName(student.getName() + "hello");
            return student;
        }).forEach(System.out::println);

image

  • 归约:reduce
        //3. 归约
        List<Student> students = genStudents();
        // 求年龄总和 利用map将学生的年龄都映射出来,再利用reduce归约求和
        Integer ageSum = students.stream().map(Student::getAge).reduce(0, (a, b) -> a + b);
        System.out.println(ageSum);

image

  • 排序:sorted
        //4. 排序
        List<Student> students = genStudents();
        students.stream().sorted((s1, s2) -> s2.age - s1.age).forEach(System.out::println);

image

posted @ 2025-03-03 23:49  黄高林  阅读(19)  评论(0)    收藏  举报