强大的Stream API
Stream API的概述
* 1. Stream关注的是对数据的运算,与CPU打交道
* 集合关注的是数据的存储,与内存打交道
*
* 2. Stream 自己不会储存元素。
* Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
* Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行
*
* 3. Stream 执行流程
* ① Stream的实例化
* ② 一系列的中间操作
(过滤、映射、
...)
* ③ 终止操作
*
* 4. 说明
* ①一个中间操作链,对数据源的数据进行处理
* ②一旦执行终止操作,就执行中间操作链,并产生结果。之后,此Stream不能再被使用
*
Stream的实例化
方式一: 通过集合
EmployeeData
提供用于测试的数据
public class EmployeeData {
public static List
<Employee> getEmployees(){
List
<Employee> list
= new ArrayList<>();
list
.add(new Employee(1001, "马化腾", 34, 6000.38));
list
.add(new Employee(1002, "马云", 12, 9876.12));
list
.add(new Employee(1003, "刘强东", 33, 3000.82));
list
.add(new Employee(1004, "雷军", 26, 7657.37));
list
.add(new Employee(1005, "李彦宏", 65, 5555.32));
list
.add(new Employee(1006, "比尔盖茨", 42, 9500.43));
list
.add(new Employee(1007, "任正非", 26, 4333.32));
list
.add(new Employee(1008, "扎克伯格", 35, 2500.32));
return list
;
}
}
@Test
public void test1(){
List
<Employee> employees
= EmployeeData
.getEmployees();
Stream
<Employee> stream
= employees
.stream();
Stream
<Employee> parallelStream
= employees
.parallelStream();
}
创建Stream方式二: 通过数组
@Test
public void test2(){
int[] arr1
= new int[]{1,2,3,4,5,6,7,8,9,10};
IntStream stream
= Arrays
.stream(arr1
);
Employee e1
= new Employee(1001,"李小姐");
Employee e2
= new Employee(1002,"张先生");
Employee
[] arr2
= new Employee[]{e1
,e2
};
Stream
<Employee> stream1
= Arrays
.stream(arr2
);
}
创建Stream方式三: 通过Stream的of()
@Test
public void test3(){
Stream
<Integer> integerStream
= Stream
.of(2, 3, 4, 8, 9, 6);
}
创建Stream方式四: 创建无限流
@Test
public void test4(){
Stream
.iterate(0,t
-> t
+ 2).limit(10).forEach(System
.out
::println
);
Stream
.generate(Math
::random
).limit(10).forEach(System
.out
::println
);
}