java8新特性——Stream接口

Stream接口

1,stream的foreach方法

Stream不是一个数据结构,不直接存储数据,它通过管道来操作数据。

创建Stream接口实现类对象:

stream():创建一个Stream接口实现类的对象:

Stream<Person> stream = People.stream();

使用方式:

先创建一个Person类:

package new_feature.stream;

public class Person {

public static enum Sex {

MALE, FEMALE

}

private String name;

private Sex gender;

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 Person(String name, Sex sex) {

this.name = name;

this.gender = sex;

}

@Override

public String toString() {

return "Person [name=" + name + ", gender=" + gender + "]";

}

}

测试类:

package new_feature.stream;

import java.util.ArrayList;

import java.util.List;

import java.util.stream.Stream;

import new_feature.stream.Person.Sex;

public class StreamTest {

// 集合初始化

static List<Person> createPeople() {

List<Person> people = new ArrayList<Person>();

Person person1 = new Person("张飞", Sex.MALE);

Person person2 = new Person("关羽", Sex.MALE);

Person person3 = new Person("刘备", Sex.MALE);

people.add(person3);

people.add(person2);

people.add(person1);

return people;

}

}

main方法中的调用:

public static void main(String[] args) {

List<Person> people = createPeople();

Stream<Person> stream = people.stream();

stream.forEach(p -> System.out.println(p.toString()));

}

这样就可以一次打出person里的内容了。

2,stream的filter方法

先给people设置两类的值,一是male,一是female

// 集合初始化

static List<Person> createPeople() {

List<Person> people = new ArrayList<Person>();

Person person1 = new Person("张飞", Sex.MALE);

Person person2 = new Person("关羽", Sex.MALE);

Person person3 = new Person("刘备", Sex.MALE);

Person person4 = new Person("貂蝉", Sex.FEMALE);

Person person5 = new Person("黄月英", Sex.FEMALE);

people.add(person3);

people.add(person2);

people.add(person1);

people.add(person4);

people.add(person5);

return people;

}

然后在main方法中进行调用:

public static void main(String[] args) {

List<Person> people = createPeople();

people.stream().filter(p -> p.getGender() == Person.Sex.FEMALE).forEach(p -> System.out.println(p));

}

这样就可以实现,先选择出female类别的,在进行处理。

3,DoubleStream

DoubleStream接口表示元素类型是double的数据源

DoubleStream接口的常用方法:

(1)max().getAsDouble():获取流中数据集的最大值;

(2)stream.min().getAsDouble():获取数据流中数据集的最小值;

(3)stream.average():获取数据流中数据集的平均值;

修改person类,增加height字段:

private double height;

并增加一个构造方法:

public Person(String name, Sex sex, double height) {

this.name = name;

this.gender = sex;

this.height = height;

}

构造数据的函数:

// 集合初始化

static List<Person> createPeople() {

List<Person> people = new ArrayList<Person>();

Person person1 = new Person("张飞", Sex.MALE, 1.8);

Person person2 = new Person("关羽", Sex.MALE, 1.85);

Person person3 = new Person("刘备", Sex.MALE, 1.75);

Person person4 = new Person("貂蝉", Sex.FEMALE, 1.63);

Person person5 = new Person("黄月英", Sex.FEMALE, 1.65);

people.add(person3);

people.add(person2);

people.add(person1);

people.add(person4);

people.add(person5);

return people;

}

测试方法:

public static void main(String[] args) {

List<Person> people = createPeople();

double aveHeight = people.stream().filter(p -> p.getGender() == Person.Sex.MALE).mapToDouble(p -> p.getHeight()).average().getAsDouble();

System.out.println("所有男性的平均身高:" + aveHeight + "米");

}

是不是方便了很多,感觉java学习了动态语言的功能,强化了灵活性。

猜你喜欢

转载自blog.csdn.net/qq_22059611/article/details/84030659