JAVA8--Stream流

Stream流在JAVA8中添加Stream,这个真的是一个好东西。学习使用Stream会有效提高开发效率。究竟流有什么用呢?简单来说就是从数据源当中处理操作并输元素序列的一个东西,好像说得不太好。来段代码看看吧!我们有一个列表,里面筛选出女同学放到另外一个列表当中,以前我们是这样做的。先给出一个实体Student类(这个实体类会在例子当中使用)public class Studen...
摘要由CSDN通过智能技术生成

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<Student> 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<Student> 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<Student> 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<Student> 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的多核特性。后面我们会一一讲解如何使用。
  • 元素序列:
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值