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学习了动态语言的功能,强化了灵活性。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值