Java8新特性之Stream接口

一、什么是Stream

  1. Stream在Java8中被定义为泛型接口
  2. Stream接口代表数据流:此数据流并非我们所熟知的I/O流
  3. Stream不是一个数据结构,不直接存储数据。
 4. Stream通过管道操作数据。
 5. 创建Stream接口实现类对象:
      stream():创建一个Stream接口实现类的对象。
   例如:
       Stream<Person> stream = people.stream();
      其中people是一个ArrayList集合,调用其中的stream()方法,返回一个Stream对象

二、 什么是管道

  1. 管道:代表一个操作序列。
  2. 管道包含以下组件:
      a. 数据集:可能是集合、数组等。
      b. 零个或多个中间业务。如过滤器
      c. 一个终端操作,如forEach

三、什么是过滤器

  1. 过滤器:用给定的条件在源数据基础上过滤出新的数据,并返回一个Stream对象。
 2. 过滤器包含匹配的谓词。
      例如:判断p对象是否为男性的lambda表达式:
          Stream<Person> stream = people.stream();
          stream = stream.filter(p->p.getGender() == '男');

【案例】:创建一个元素为Person类的集合:people,使用Stream和forEach显示该集合所有元素。

创建Person类:

public class Person {
    public static enum Sex{
        MALE,FEMALE;
    }
    private String name;
    private Sex gender;
    private int age;
    private double height;

    public Person() {
    }

    public Person(String name, Sex gender, int age, double height) {
        super();
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.height = height;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Sex getGender() {
        return gender;
    }
    public void setGender(Sex gender) {
        this.gender = gender;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public double getHeight() {
        return height;
    }
    public void setHeight(double height) {
        this.height = height;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", gender=" + gender + ", age=" + age + ", height=" + height + "]";
    }

}

创建一个生成元素为Person对象的ArrayList集合的静态方法:

public class Test03_collection_stream {


    public static List<Person> createPerson(){
        List<Person> people = new ArrayList<Person>();
        Person person = new Person("张飞",Person.Sex.MALE,33,1.99);
        people.add(person);
        person = new Person("王菲",Person.Sex.FEMALE,33,1.65);
        people.add(person);
        person = new Person("刘亦菲",Person.Sex.FEMALE,33,1.68);
        people.add(person);
        person = new Person("李四",Person.Sex.MALE,33,1.76);
        people.add(person);
        person = new Person("小马",Person.Sex.MALE,33,1.71);
        people.add(person);
        person = new Person("郭靖",Person.Sex.MALE,33,1.88);
        people.add(person);
        return people;
    }

}

创建一个main方法,在main方法中进行测试:

public class Test03_collection_stream {



    public static void main(String[] args) {       
        List<Person> people = createPerson();//调用createPerson静态方法,返回一个List集合,集合中包含若干个Person对象。
        Stream<Person> stream = people.stream(); //调用集合的stream()方法返回一个Stream对象
        stream.forEach(p -> {
            System.out.println(p);
        });//调用Stream的forEach()方法,该方法传入一个lambda表达式。
    }

}

运行main方法,控制台打印输出如下:

Person [name=张飞, gender=MALE, age=33, height=1.99]
Person [name=王菲, gender=FEMALE, age=33, height=1.65]
Person [name=刘亦菲, gender=FEMALE, age=33, height=1.68]
Person [name=李四, gender=MALE, age=33, height=1.76]
Person [name=小马, gender=MALE, age=33, height=1.71]
Person [name=郭靖, gender=MALE, age=33, height=1.88]

本文代码资源下载地址:

https://github.com/gitHjx/java8.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值