Stream APIs是Java 8新添加的数据运算型APIs主要要作用是对读取的数据进行计算。因为毕业课题与这些API相关,所以特意来学习了解。
-
Stream API主要的作用是对数据的运算,与CPU相关。
集合相关API主要作用是对数据进行存储,与内存关系密切。
-
Stream对象的特点:
2.1 自身不存储元素。
2.2 中间操作返回持有操作后结果的Stream对象。
2.3 中间操作是延迟操作;这意味着当执行终止操作时,才进行前面操作的运算,并返回结果。
-
Stream对象执行运算的操作流程:
3.1 Stream对象的实例化
3.2 附加一系列中间操作(过滤、映射、筛选、切片)
3.3 附加终止操作(匹配、查找、归约、收集)
-
使用说明:
4.1 操作是对数据源的数据读取再处理,不改变源数据。
4.2 终止操作结束后,Stream实例被释放,不能再使用。
代码示例:
public class StreamTest {
/**
* 通过集合对象获取Stream实例
*/
@Test
public void test1() {
//获取顺序流,有序读取数据
List<Employee> list = EmployeeData.getEmployees();
Stream<Employee> stream = list.stream();
//获取并行流,并发读取数据(多个线程读取数据);
Stream<Employee> stream2 = list.parallelStream();
}
/**
* 通过数组(Arrays工具类)获取Stream实例
*/
@Test
public void test2() {
//int
int [] intArray = new int [] {1,2,3,4,5,6,7};
IntStream stream = Arrays.stream(intArray);
//T
Employee employee = new Employee();
Employee employee2 = new Employee();
Employee [] employees = new Employee [] {employee, employee2};
Stream<Employee> stream2 = Arrays.stream(employees);
}
/**
* 通过Stream类自带的of方法创建实例。
*/
@Test
public void test3() {
Stream<Integer> stream = Stream.of(1,2,3,4,5);
}
/**
* 通过自带函数创建iterate创建无限流
*/
@Test
public void test4() {
//无限创造个偶数数;从0开始,并且是递归的
//参数是Function子接口的对象实例
// Stream.iterate(0, number -> number + 2).forEach(System.out :: println);
//通过中间方法limit限制个数
Stream.iterate(0, number -> number + 2).limit(100).forEach(System.out :: println);
}
/**
* 通过自带函数创建generate创建无限流
*/
@Test
public void test5() {
//无限创造个0
//参数是Supplier接口的对象实例
//Stream.generate(() -> 0).forEach(System.out :: println);
//通过中间方法limit限制个数
Stream.generate(() -> 0).limit(10).forEach(System.out :: println);
}
}