美文网首页工作生活Java
Java 8 之Stream 生成姿势

Java 8 之Stream 生成姿势

作者: Unyielding_L | 来源:发表于2018-07-25 11:50 被阅读0次

    Stream 的定义

    • 支持顺序和并行聚合操作的元素序列
    • 可以由数组、集合以及文件转换而成
    • Stream 消费完之后便没有了,就想流水一样
    • 生成流的“源”是一个不会在操作流的过程中改变

    生成流的"姿势"

    • 数组生成流
    Integer[] arr = {1, 2, 3, 4, 6};//这里可以开成int[] 试试看看结果。。。①
            Stream.of(arr)//生成流Stream<Integer>
                    .forEach(System.out::println);//打印流中的每个元素
    
    • 集合(list)生成流,Collection 接口已经添加了stream 方法,即所有实现改接口的都可以生成流
    Arrays.asList(1, 2, 3, 4)//返回list集合
                    .stream()//转换为Stream<Integer>
                    .forEach(System.out::println);
    
    • 读文件生成流
    Files.lines(Paths.get("E:\\temp\\test.txt"))
                    .forEach(System.out::println);
    
    • Stream 自带生成无限流, Stream 类中的有两个静态方法来生成无限流
      • 方法签名:public static<T> Stream<T> generate(Supplier<T> s);Supplier<T> 是一个函数式接口,主要作用生产流中的元素
    Stream.generate(() -> 1)
                    .limit(5)// 
                    .forEach(System.out::println);
    
    • 方法签名:public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f);seed 就是初始值,UnaryOperator<T> 操作传进来的参数 返回和参数相同的类型
    Stream.iterate(5, i -> i + 1)//生成无线流
                    .limit(5)//使用limit 截断流 这里取前5个,类比sql 的limit
                    .forEach(System.out::println);
    

    上面两个方法都是生成无限流,下面来讲两个个生成有限流的

    • LongStream和IntStream的range()和rangeClosed() 方法,两个方法的参数都是一样:起始值和结束值,类型都是long或者int, 这两个方法的区别是:range方法是不包括结束值,rangeClosed是包含结束值的。
    @Test
        public void streamRanged() {
            IntStream.range(1, 2)
                    .forEach(System.out::println);
        }
    

    结果:

     1
    
        @Test
        public void streamRangeClosed() {
            IntStream.rangeClosed(1, 2)
                    .forEach(System.out::println);
        }
    

    结果:

    1
    2
    

    大家欢迎指正批评
    代码地址

    相关文章

      网友评论

        本文标题:Java 8 之Stream 生成姿势

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