集合流式操作概念:不是一个数据结构,它并不负责任何的数据存储。非常像是一个迭代器。可以有序的获取到数据源中的每一个数据,并且可以对这些数据进行一些操作。
流式操作的每一个方法,返回值都是返回流本身。
集合流式操作由三个步骤组成:
1.获取数据源:集合,数组
2.对数据进行处理的过程:过滤,排序,映射---------------------(中间操作)
3.对流中书的整合:转成集合,数量--------------------(最终操作)
接下来进行详细了解下:
第一步骤:准备数据源:
定义一个StreamingPerson对象代码如:
package com.test.cgb;
public class StreamingPerson {
private String name;
private int age;
private int score;
public String getName() {
return name;
}
public StreamingPerson setName(String name) {
this.name = name;
return this;
}
public int getAge() {
return age;
}
public StreamingPerson setAge(int age) {
this.age = age;
return this;
}
public int getScore() {
return score;
}
public StreamingPerson setScore(int score) {
this.score = score;
return this;
}
public StreamingPerson(String name, int age, int score) {
this.name = name;
this.age = age;
this.score = score;
}
@Override
public String toString() {
return "StreamingPerson {" +
"name=" + name + '\'' +
",age=" + age +
", score=" + score +
'}';
}
}
还有一个创建ArrayList对象数组的类:
package com.test.cgb;
import java.util.ArrayList;
import java.util.List;
public class StreamingData {
@SuppressWarnings("rawtypes")
public static ArrayList getData() {
ArrayList list = new ArrayList<>();
list.add(new StreamingPerson("流1", 10, 70));
list.add(new StreamingPerson("流2", 20, 80));
list.add(new StreamingPerson("流3", 30, 90));
list.add(new StreamingPerson("流4", 40, 60));
list.add(new StreamingPerson("流5", 50, 40));
return list;
}
}
获取数据源:
package com.test.cgb;
import java.util.stream.Stream;
public class StreamingTest {
public static void main(String[] args) {
// 第一种写法用得比较多
/**
*
* public interface Collection extends Iterable {
default Stream stream() {
return StreamSupport.stream(spliterator(), false);
}
}
*/
@SuppressWarnings("rawtypes")
Stream se = StreamingData.getData().stream();
System.out.println(se.toString());
/*
* 第二种写法
* public interface Stream extends BaseStream> {
public static Stream of(T t) {
return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false);
}
}
*/
Stream.of(StreamingData.getData());
/**
* 第三种写法,可扩展参数
* public interface Stream extends BaseStream> {
@SafeVarargs
@SuppressWarnings("varargs") // Creating a stream from an array is safe
public static Stream of(T... values) {
return Arrays.stream(values);
}
}
*/
Stream.of(
new StreamingPerson("流1", 10, 70),
new StreamingPerson("流2", 20, 80),
new StreamingPerson("流3", 30, 90),
new StreamingPerson("流4", 40, 60)
);
}
}