JAVA8--Stream流

Stream流

在JAVA8中添加Stream,这个真的是一个好东西。学习使用Stream会有效提高开发效率。究竟流有什么用呢?简单来说就是从数据源当中处理操作并输元素序列的一个东西,好像说得不太好。来段代码看看吧!我们有一个列表,里面筛选出女同学放到另外一个列表当中,以前我们是这样做的。

先给出一个实体Student类(这个实体类会在例子当中使用)

public class Student {

    public static final int GENDER_FEMALE = 0;
    public static final int GENDER_MALE = 1;

    private String name;

    private int age;

    private int gender;

    private String className;

    public Student() {
    }

    public Student(String name, int age, int gender, String className) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.className = className;
    }

    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 int getGender() {
        return gender;
    }

    public void setGender(int gender) {
        this.gender = gender;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }
}

按照原定计划,通过旧的代码筛选出女同学。不过在输出我也偷懒了一下用了stream来打印输出,不过具体怎么写我后面会说到。

    public static void main(String[] args) {
        List studentList = new ArrayList<>();
        studentList.add(new Student("Jason", 18, Student.GENDER_MALE, "ClassA"));
        studentList.add(new Student("May", 17, Student.GENDER_FEMALE, "ClassB"));
        studentList.add(new Student("Angelia", 18, Student.GENDER_FEMALE, "ClassB"));
        studentList.add(new Student("Alisa", 16, Student.GENDER_FEMALE, "ClassA"));
        studentList.add(new Student("Aimee", 16, Student.GENDER_FEMALE, "ClassA"));
        studentList.add(new Student("Ryan", 18, Student.GENDER_MALE, "ClassB"));

        List list = new ArrayList<>();
        for (Student stu : studentList) {
            if (stu.getGender() == Student.GENDER_FEMALE) {
                list.add(stu);
            }
        }

        //打印结果(后面会学到,这个就是用stream实现的)
        list.stream().map(Student::getName).forEach(System.out::println);
    }

如果换成Stream的写法将会非常简单,看看以下代码:

public static void main(String[] args) {
        List studentList = new ArrayList<>();
        studentList.add(new Student("Jason", 18, Student.GENDER_MALE, "ClassA"));
        studentList.add(new Student("May", 17, Student.GENDER_FEMALE, "ClassB"));
        studentList.add(new Student("Angelia", 18, Student.GENDER_FEMALE, "ClassB"));
        studentList.add(new Student("Alisa", 16, Student.GENDER_FEMALE, "ClassA"));
        studentList.add(new Student("Aimee", 16, Student.GENDER_FEMALE, "ClassA"));
        studentList.add(new Student("Ryan", 18, Student.GENDER_MALE, "ClassB"));

        List list = studentList.stream() //获得一个stream流对象
                //筛选出女性同学(通过lambda表达式定义)
                .filter((student)->student.getGender() == Student.GENDER_FEMALE)
                //筛选后获得一个列表
                .collect(Collectors.toList());

        //打印结果(后面会学到,这个就是用stream实现的)
        list.stream().map(Student::getName).forEach(System.out::println);
    }

是不是简单很多呢?段段几行代码就完成这个操作了,接下来我们好好学习一下Stream流是如何去使用的。

一、了解Stream

 

Stream最简单的操作,可以拆解成三步

  • 源:stream会获得一个数据源,这个数据源可以是文件、List、数组等等。
  • 数据处理:流的数据处理操作非常多种多样,非常类似与数据库操作。如上面我们见到的filter和map都是输入数据操作的一部分,除此之外还包括find、match、sort、reduce等,而且流的操作可以并行执行和顺序执行充分利用CPU的多核特性。后面我们会一一讲解如何使用。
  • 元素序列:

你可能感兴趣的:(JAVA,JAVA8,流,Stream,遍历,循环)