• Java 8 Stream Api 中的 skip 和 limit 操作


    1. 前言

    Java 8 Stream API 中的skip()limit()方法具有类似的作用。它们都是对流进行裁剪的中间方法。今天我们来探讨一下这两个方法。

    2. skip()

    skip(lang n) 是一个跳过前 n 个元素的中间流操作。我们编写一个简单的方法来进行skip操作,将流剩下的元素打印出来。

      public static void skip(long n) {
            Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6);
            integerStream.skip(n).forEach(integer -> System.out.println("integer = "   integer));
        }

    经过测试,当 n < 0 时直接抛出了 IllegalArgumentException 异常。毕竟要跳过一些元素,跟下象棋一个道理不能后退只能向前。当 n=0 时,原封不动完璧归赵。这种操作一般我们不会主动搞,没有意义。当 n=4 时,打印了 56 ,由此可推断当我们取值大于等于流的大小时肯定什么也没有了,对于流来说肯定是个空流。经过检验确实count=0

    也就是说 skip(long n) 方法跳过前 n (非负)个元素,返回剩下的流,有可能为空流。

    3. limit()

    limit(long maxsize) 我们也如法炮制:

        public static void limit(long maxsize) {
            Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6);
             integerStream.limit( maxsize).forEach(integer -> System.out.println("integer = "   integer));
        }

    n < 0 时直接抛出了 IllegalArgumentException 异常。当 n=0 时,返回一个空流。当 n=4 时,打印了 1234n=8 时,打印了所有元素。感觉跟 mysq的分页有异曲同工之妙。

    4. 区别

    这两个方法都是截取了流。但是它们有一些区别 skip 操作必须时刻监测流中元素的状态。才能判断是否需要丢弃。所以 skip 属于状态操作。

    limit 只关心截取的是不是其参数 maxsize (最大区间值),其它毫不关心。一旦达到就立马中断操作返回流。所以 limit 属于一个中断操作。

    5. 总结

    今天对Java Stream API 的 skip()limit()方法进行了探讨。不知道你会想到在什么场景下会分别用到它们呢,不妨留言告诉我。

    关注公众号:Felordcn获取更多资讯

    个人博客:https://felord.cn

  • 相关阅读:
    在VS2010下,用C语言编写pthread多线程程序的配置
    java帮助文档系列JDK1.5 JDK1.6 JDK1.7官方中英完整版下载
    瑜伽练习day02----适合练习瑜伽时听的歌曲
    瑜伽练习day01----瑜伽练习的好处,坏处
    抛出错误Debug Assertion Failed!
    stringstream的基本用法
    AWS中S3的Bucket桶访问策略
    AWS中SQS的几项使用注意
    AWS在.Net中连接数据库时发生认证错误的解决办法
    .Net捕捉配置或程序错误
  • 原文地址:https://www.cnblogs.com/felordcn/p/12142507.html
Copyright © 2020-2023  润新知