Stream流建立的四種方式
package com.xiaobu.lambda.java3;
import com.xiaobu.lambda.java2.Employee;
import com.xiaobu.lambda.java2.EmployeeData;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
/**
* 1. Stream關注的是對資料的運算,與CPU打交道
* 集合關注的是資料的存儲,與記憶體打交道
*
* 2.
* ①Stream 自己不會存儲元素。
* ②Stream 不會改變源對象。相反,他們會傳回一個持有結果的新Stream。
* ③Stream 操作是延遲執行的。這意味着他們會等到需要結果的時候才執行
*
* 3.Stream 執行流程
* ① Stream的執行個體化
* ② 一系列的中間操作(過濾、映射、...)
* ③ 終止操作
*
* 4.說明:
* 4.1 一個中間操作鍊,對資料源的資料進行處理
* 4.2 一旦執行終止操作,就執行中間操作鍊,并産生結果。之後,不會再被使用
*
*
* 測試Stream的執行個體化
*
* @author qsong
*/
public class StreamAPITest {
//建立 Stream方式一:通過集合
@Test
public void test1(){
List<Employee> employees = EmployeeData.getEmployees();
// 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 e1 = new Employee(1001,"Tom");
Employee e2 = new Employee(1002,"Jerry");
Employee[] arr1 = new Employee[]{e1,e2};
Stream<Employee> stream1 = Arrays.stream(arr1);
}
//建立 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<T> f)
//周遊前10個偶數
Stream.iterate(0, t -> t + 2).limit(10).forEach(System.out::print);
System.out.println();
Stream.iterate(1,t->t+2).limit(5).forEach(System.out::print);
System.out.println();
// 生成
// public static<T> Stream<T> generate(Supplier<T> s)
Stream.generate(Math::random).limit(10).forEach(System.out::println);
List<Double> collect = Stream.generate(Math::random).limit(10).collect(Collectors.toList());
Stream.generate(Math::random).limit(10).collect(Collectors.toList());
}
}