美文网首页
Java8 Stream 创建流

Java8 Stream 创建流

作者: 垃圾简书_吃枣药丸 | 来源:发表于2020-09-21 19:00 被阅读0次
    image.png
    • 创建流的方法有很多,常见的如:
      1. 从Collection集合创建
      2. 根据数值范围创建数值流
      3. 从一系列值
      4. 从数组
      5. 从文件
      6. 由函数来生成无限流

    一、 从Collection集合

    Stream<Integer> stream = new HashSet<Integer>()
                    .stream();
    Stream<String> stringStream = new ArrayList<String>()
                    .stream();
    

    二、 根据数值范围创建数值流

    IntStream intStream = IntStream.rangeClosed(1, 100);
    

    三、 从一系列值

    • Stream提供了一个静态方法来根据一系列值生成一个流
    Stream<Integer> integerStream = Stream.of(1, 2, 3);
    Stream<String> stringStream = Stream.of("喜欢", "天文", "的", "pony", "站长");
    AppleStream apple = new AppleStream();
    Stream<AppleStream> appleStream = Stream.of(apple, apple, apple);
    

    四、 从数组

    //重载了支持特定的基本类型流
    IntStream intStream = Arrays.stream(new int[]{1, 2, 3});
    LongStream longStream = Arrays.stream(new long[]{1L, 2L, 3L});
    DoubleStream doubleStream = Arrays.stream(new double[]{1D, 2D, 3D});
            
    Stream<String> stringStream = Arrays.stream(new String[]{"喜欢", "天文", "的", "pony", "站长"});
    AppleStream apple = new AppleStream();
    Stream<AppleStream> appleStream = Arrays.stream(new AppleStream[]{apple, apple, apple});
    

    五、 从文件

    • 准备文件


      image.png
    Stream<String> linesStream = Files.lines(Paths.get("fileStream.txt"));
    linesStream.forEach(System.out::println);
    
    • 结果


      image.png

    六、由函数来生成无限流

    • Java8提供了Stream.iterate()Stream.generate()来生成无限流,这两个方法会根据给定的表达式来生成包含无限个数据的流,所以一般结合limit()来使用。
      1. 迭代: Stream.iterate(T seed,Function<T, R> apply)
      2. 生成: Stream.generate(Supplier<T> s)
    // 给定一个初始值seed,和一个`接收一个入参,并带有返回值的函数`
    Stream.iterate(10, x -> x + 5)
            .limit(10)
            .forEach(System.out::println);
    
    10
    15
    20
    25
    30
    35
    40
    45
    50
    55
    
    Random random = new Random();
    // 接收一个 `无入参,有返回值` 的函数
    Stream.generate(() -> random.nextInt(100))
            .limit(10)
            .forEach(System.out::println);
    
    60
    56
    6
    61
    7
    30
    97
    64
    26
    54
    

    相关文章

      网友评论

          本文标题:Java8 Stream 创建流

          本文链接:https://www.haomeiwen.com/subject/elqvyktx.html