强大的Stream API

Stream API的概述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YOvrRMJU-1603202543233)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020210212628.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6vEV290f-1603202543235)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020210757548.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ucW9U7Wx-1603202543238)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020211021981.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qqL89u0v-1603202543247)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020211216233.png)]

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

Stream的实例化

方式一: 通过集合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B4eupORP-1603202543249)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020213232574.png)]

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方式二: 通过数组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v6Nc2hKY-1603202543250)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020214018046.png)]

    //创建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()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LWoFQixG-1603202543251)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020214743245.png)]

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SNnAddf3-1603202543252)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020215103851.png)]

    //创建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);
        
    }
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐