Java 8 Stream Api 中的 skip 和 limit 操做

1. 前言

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

2. skip()

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

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=0api

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

3. limit()

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

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的分页有殊途同归之妙。code

4. 区别

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

limit 只关心截取的是否是其参数 maxsize (最大区间值),其它绝不关心。一旦达到就立马中断操做返回流。因此 limit 属于一个中断操做。htm

5. 总结

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

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

我的博客:https://felord.cn

相关文章
相关标签/搜索