Java Stream流的创建

1.大致分类

   本文将主要从如下五个方面来讲Stream流的创建
在这里插入图片描述

2.直接上代码

  为了大家的方便,也是为了自己以后看起来方便,我对上面五种创建Stream流的方式都手写了一下,下面是具体的代码

package com.nrsc.stream;

import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
 * Stream流的创建
 */
public class create {
    public static void main(String[] args) {
        /**
         * Ⅰ 从集合创建流
         *       继承了Collection接口的集合类可以使用下面两种方式来创建Stream流
         *       方式1:集合实体.stream-----------------创建普通Stream流
         *       方式2:集合实体.parallelStream---------创建并行流
         *
         *   下面以List为例进行演示
         */
        List<String> list = Arrays.asList("hello", "world", "hi", "java");   //创建list集合

        list.stream().forEach(s -> System.out.print(s + " "));// -----------------创建普通Stream流
        list.parallelStream().forEach(s -> System.out.print("|||" + s));//---------创建并行流
        System.out.println("==========================");


        /**
         *  Ⅱ 从数组创建流 --- Arrays.
         *       主要包含两种方式
         *           方式1:Arrays.stream(T[] array)-------------------------------------------参数为一个数组
         *           方式2:Arrays.stream(T[] array, int startInclusive, int endExclusive)-----参数为一个数组,加上起始下标(包头不包尾)
         */
        Arrays.stream(new String[]{"hello", "world", "hi", "java"}).forEach(System.out::println);
        Arrays.stream(new int[]{1111, 1, 22, 33, 4, 5, 6}, 2, 5).forEach(System.out::println); //22,33,4
        Arrays.stream(new String[]{"hello", "world", "hi", "java", "python"}, 1, 3).forEach(System.out::println); //world hi
        System.out.println("+++++++++++++++++++++++++++++++++++++++++++++");

        /**
         *  Ⅲ 数字流-------IntStream/LongStream/DoubleStream/
         *      以IntStream为例:
         */
        IntStream.empty();  //产生一个空的IntStream流
        IntStream.of(1, 2, 3, 4).forEach(System.out::println);
        IntStream.of(new int[]{11, 22, 33, 44}).forEach(System.out::println);
        IntStream.iterate(1, i -> i + 2).limit(5).forEach(System.out::println); //1 3 5 7 9 (其中第一个参数1为基数,第二个参数要一个输入和输出都为int型的一元函数)
        IntStream.generate(() -> 3333).limit(5).forEach(System.out::println); //参数为一个提供者

        IntStream.range(1, 10).forEach(System.out::println);  /**1-9,如果第一个参数大于第二个参数返回一个空的IntStream流*/
        IntStream.rangeClosed(1, 10).forEach(System.out::println); /**1-10,如果第一个参数大于第二个参数返回一个空的IntStream流*/

        IntStream.concat(IntStream.of(1, 2, 3), IntStream.of(11, 22, 33)).forEach(System.out::println);  //合并两个IntStream流


        System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
        /**
         *   Ⅳ 用Stream类进行创建
         *        注意1:  Stream类创建流与 方式Ⅲ创建流的方式很想只是少了range 和 rangeClosed方法
         *        注意2:  Stream和IntStream/LongStream/DoubleStream/并没有继承关系,
         *                由IntStream/LongStream/DoubleStream变为Stream流要进行装箱操作----boxed
         */
        Stream.empty();//产生一个空的Stream流
        Stream.of("hello", "world", "hi", "java").forEach(System.out::println);
        Stream.of(new String[]{"hello2", "world2", "hi2", "java2"}).forEach(System.out::println);
        Stream.iterate("say", s -> s + " hi").limit(3).forEach(System.out::println); //say    say hi    say hi hi

        Stream.generate(Math::random).limit(5).forEach(System.out::println);  //产生5个double随机数

        Stream.concat(Stream.of(11, 22, 33), Stream.of(44, 55, 66)).forEach(System.out::println);  //合并数组
        /**
         * 这里需要注意Stream和IntStream并没有继承关系,InStream转为Stream要进行装箱操作  boxed
         */
        Stream.concat(IntStream.of(99, 88, 77).boxed(), Stream.of(-11, -22, -33)).forEach(System.out::println);
        //同时要注意下面种方式是无法完成转换的
        //IntStream intStream = (IntStream) Stream.of(1, 2, 3); //会报错

        System.out.println("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");

        /**
         *   Ⅴ 其他方式
         *      由字符串.chars创建流
         *      由 new Random().ints  new Random().longs  new Random().doubles
         *
         *      以new Random().ints 为例
         */

        /**由字符串直接获得一个流对象*/
        "abc".chars().forEach(System.out::println);//97 98 99 //流中是各个字符对应的ASCII码值
        "abc".chars().forEach(i -> System.out.println((char) i)); //a b c

        System.out.println("#########################################################");

        /**
         * 通过 new Random().ints/ new Random().longs()/ new Random().doubles()方式创建
         */
        new Random().ints().limit(5).forEach(System.out::println);  //产生5个随机数//通过limit限制流产生的个数
        new Random().ints(4).forEach(System.out::println); //产生4个随机数//在ints()里显示流产生的个数

        System.out.println("#########################################################");
        new Random().ints(2, 7).limit(5).forEach(System.out::println);  //随机产生5个在2-7之间的数字(包头不包尾)
        new Random().ints(5, 1, 10).forEach(System.out::println);  //随机产生5个大小在1-10之间的数(包头不包尾)
    }
}

3.一点说明

  对是方式Ⅰ着重说明一下,这里的集合指的是继承了Collection接口的集合,下面这个继承关系(图片来自于Java集合框架综述,大家应该都挺熟悉了,它们都可以按照方式1进行Stream流的创建.
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值