我们首先看一下JDK文档中对Stream的介绍
那么Stream到底是什么了?
Stream是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。
“集合讲的是数据,流讲的是计算!”
Stream 的特点
Stream 自己不会存储元素。Stream 不会改变源对象,相反,他们会返回一个持有结果的新Stream。Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。
Stream数据流的基本操作
代码测试
在这之前你有必要先了解四大函数式接口,因为Stream的底层就是这些函数式接口。
User实体
package com.zhang.stream;
public class User {
private int id;
private String name;
private int age;
public User() {
}
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + ''' +
", age=" + age +
'}';
}
}
Stream流
package com.zhang.stream;
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
User u1 = new User(1, "a", 20);
User u2 = new User(2, "b", 25);
User u3 = new User(3, "c", 27);
User u4 = new User(4, "d", 21);
User u5 = new User(5, "e", 22);
//集合就是存储
List users = Arrays.asList(u1, u2, u3, u4, u5);
//计算交给Stream
// 链式编程
users.stream()
.filter(u->{return u.getId()%2==0;})
.filter(u->{return u.getAge()>20;})
.map(u->{return u.getName().toUpperCase();})
.sorted((uu1,uu2)->{return uu2.compareTo(uu1);}) // //sorted() 自然排序,正排序 D->E
.limit(1)
.forEach(System.out::println);
}
}



