天天看点

Java Stream API的介绍和使用(Stream对象实例的初始化)

Stream APIs是Java 8新添加的数据运算型APIs主要要作用是对读取的数据进行计算。因为毕业课题与这些API相关,所以特意来学习了解。

  1. Stream API主要的作用是对数据的运算,与CPU相关。

    集合相关API主要作用是对数据进行存储,与内存关系密切。

  2. Stream对象的特点:

    2.1 自身不存储元素。

    2.2 中间操作返回持有操作后结果的Stream对象。

    2.3 中间操作是延迟操作;这意味着当执行终止操作时,才进行前面操作的运算,并返回结果。

  3. Stream对象执行运算的操作流程:

    3.1 Stream对象的实例化

    3.2 附加一系列中间操作(过滤、映射、筛选、切片)

    3.3 附加终止操作(匹配、查找、归约、收集)

  4. 使用说明:

    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);
	}
}