1.Stream关注的是对数据的运算,与CPU打交道
2. ①Stream自己不会存储元素
②Stream不会改变源对象,相反,他们会返回一个持有结果的新stream
③操作是延迟执行的, 这意味着他们会等到需要将结果的时候才会执行
3. Stream 执行流程
①:Stream的实例化
② 一系列的中间操作(过滤,映射........)
③终止操作
4.说明:
4.1 一个中间操作链,对数据源的数据进行处理
4.2 一旦执行终止操作,就执行中间操作链,并产生结果。之后,不会再被使用
附直接上代码: 关于EmployeeData的类内容可以直接看Lamdba表达式(三)—方法引用&构造器引用&数组引用_云集千祥的博客-CSDN博客
package lamdba;
import org.junit.jupiter.api.Test;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;
/**
* 1.Stream关注的是对数据的运算,与CPU打交道
* 2. ①Stream自己不会存储元素
* ②Stream不会改变源对象,相反,他们会返回一个持有结果的新stream
* ③操作是延迟执行的, 这意味着他们会等到需要将结果的时候才会执行
* 3. Stream 执行流程
* ①:Stream的实例化
* ② 一系列的中间操作(过滤,映射........)
* ③终止操作
* 4.说明:
* 4.1 一个中间操作链,对数据源的数据进行处理
* 4.2 一旦执行终止操作,就执行中间操作链,并产生结果。之后,不会再被使用
*
*/
public class StreamAPITest {
//创建Stream方式一:通过集合
@Test
public void test1(){
List<Employee> employees=EmployeeData.getEmployee();
// default Stream<E> stream(): 返回一个顺序流
Stream<Employee> stream=employees.stream();
//default Stream<E> parallelStream():返回一个并行流
Stream<Employee> parallelStream =employees.parallelStream();
}
//创建Stream方式二:通过数组
@Test
public void test2(){
int[] arr=new int[]{1,2,3,4,5,6};
//调用Arrays类的static<T> Stream<T> stream(T[] array):返回一个流
IntStream stream= Arrays.stream(arr);
Employee employee1=new Employee(1001,"hello");
Employee employee2=new Employee(1002,"world");
Employee[] arr2={employee1,employee2};
Stream<Employee> stream1=Arrays.stream(arr2);
}
//创建stream方式三: 通过stream的of()
@Test
public void test3(){
Stream<Integer> stream =Stream.of(1,2,3,4,5,6);
}
/**
* //创建stream方式四: 创建无限流
* 很少用 ,了解即可
*/
@Test
public void test4(){
//迭代
// public static<T> stream<T> iterate(final T seed,final UnaryOperator)
Stream.iterate(0,t->t+2).limit(10).forEach(System.out::println);
//生成
// public static<T> Stream<T> generate(Supplier<T> s)
Stream.generate(Math::random).limit(10).forEach(System.out::println);
}
}