Stream 流API
什么是流
流是Java8引入的全新概念,它用来处理集合中的数据,暂且可以把它理解为一种高级集合。
流的操作种类
流的操作分为两种,分别为中间操作和终端操作。
- 中间操作 当数据源中的数据上了流水线后,这个过程对数据进行的所有操作都称为“中间操作”。 中间操作仍然会返回一个流对象,因此多个中间操作可以串连起来形成一个流水线。
- 终端操作 当所有的中间操作完成后,若要将数据从流水线上拿下来,则需要执行终端操作。 终端操作将返回一个执行结果,这就是你想要的数据。
流的操作过程
使用流一共需要三步:
- 准备一个数据源
- 执行中间操作 中间操作可以有多个,它们可以串连起来形成流水线。
- 执行终端操作 执行终端操作后本次流结束,你将获得一个执行结果。
使用流
创建流
在使用流之前,首先需要拥有一个数据源,并通过StreamAPI提供的一些方法获取该数据源的流对象。数据源可以有多种形式:
集合
List<String> list = Arrays.asList("hello", "world");
Stream<String> stream = list.stream();
数组
String[] names = {
"a","b","c"};
Stream<String> stream = Arrays.stream(names);
值
Stream<String> stream = Stream.of("chaimm","peter","john");
筛选 filter
准备工作,先创建一个实体:Person
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Person {
private String name;
private Integer age;
private String gender;
private Boolean isStudent;
public static List<Person> buildData(){
List<Person> data = new ArrayList<>();
data.add(Person.builder().name("张三").age(22).gender("男").isStudent(Boolean.TRUE).build());
data.add(Person.builder().name("李斯").age(19).gender("男").isStudent(Boolean.TRUE).build());
data.add(Person.builder().name("吴玉").age(26).gender("女").isStudent(Boolean.FALSE).build());
data.add(Person.builder().name("杨贵妃").age(23).gender("女").isStudent(Boolean.