Day77.StreamAPI的概述与Stream的实例化 -Java8其他新特性

it2023-10-31  70

强大的Stream API

Stream API的概述

* 1. Stream关注的是对数据的运算,与CPU打交道 * 集合关注的是数据的存储,与内存打交道 * * 2. Stream 自己不会储存元素。 * Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。 * Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行 * * 3. Stream 执行流程 * ① Stream的实例化 * ② 一系列的中间操作(过滤、映射、...) * ③ 终止操作 * * 4. 说明 * ①一个中间操作链,对数据源的数据进行处理 * ②一旦执行终止操作,就执行中间操作链,并产生结果。之后,此Stream不能再被使用 *

Stream的实例化

方式一: 通过集合

EmployeeData 提供用于测试的数据 /** * 提供用于测试的数据 * * @author 阿昌 邮箱:995931576@qq.com * */ 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; } } //创建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方式二: 通过数组

//创建Stream方式二: 通过数组 @Test public void test2(){ int[] arr1 = new int[]{1,2,3,4,5,6,7,8,9,10}; // 调用Arrays类的静态方法: static <T> Stream<T> stream(T[] array): 返回一个 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()

//创建Stream方式三: 通过Stream的of() @Test public void test3(){ Stream<Integer> integerStream = Stream.of(2, 3, 4, 8, 9, 6); }

创建Stream方式四: 创建无限流

//创建Stream方式四: 创建无限流 @Test public void test4(){ // 迭代 public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f) //遍历从前十个偶数 Stream.iterate(0,t -> t + 2).limit(10).forEach(System.out::println); // 生成 public static<T> Stream<T> generate(Supplier<T> s) //生成输出10个随机数 Stream.generate(Math::random).limit(10).forEach(System.out::println); }
最新回复(0)