Stream API使用

创建的方式

①通过集合

 

 ②通过数组

 

 ③通过Stream的of()

 

 

Stream 自己不会存储元素

Stream 不会改变源对象,会返回一个持有结果的新Stream

Stream 操作时延迟执行的,等到需要结果的时候才执行

 一个中间操作链,对数据源的数据进行处理,一旦执行终止操作,就执行中间操作链,并产生结果。之后不会再被使用。

 

 

 

 

 

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 +
                '}';
    }
}

  

@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]
    }

  

@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}]
    }

  

 

 

 

 

 

 

 

@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]
    }

 

 

 

 

 

 

 

  

 

posted @ 2022-09-09 22:23  Mr_sven  阅读(23)  评论(0编辑  收藏  举报