Java8 Stream:为什么Stream.skip(long n)方法需要long而不是int作为参数?

时间:2017-11-05 21:17:30

标签: java java-stream

这里是Stream的跳过方法的definition

  

skip(long n)返回由剩余元素组成的流   丢弃流的前n个元素后,此流。

我的问题是为什么参数是long而不是int

这是一个例子:

import java.util.Arrays;
import java.util.List;
public class Main {
  public static void main(String[] args) {
    List<String> stringList = Arrays.asList("1","1","2","3","4");

    stringList.stream()
           .skip(2)
           .forEach(System.out::print);// will prints 234
  }
} 

3 个答案:

答案 0 :(得分:5)

因为并非所有列表都限制为Integer.MAX_VALUE个元素 例如LinkedList

答案 1 :(得分:3)

有时您可能希望在{em>无限流上skip,在这种情况下,您可能需要一个大于int类型可容纳的最大数字的数字。因此,使这样的方法接受可能的最大整数是完全有意义的。此外,正如 @Joop Eggen 所评论的那样,它与count()一致。当然,我们可以争辩说,我们可以让count()skip()同时返回/接受int但是为了利用流,有时我们可能需要可以容纳最大整数的类型。

答案 2 :(得分:2)

这是因为Stream并非总是来自像ArrayList这样的集合,其最大长度为Integer.MAX_VALUE,但也可以在每行的文件上创建,实际上使流为可能会达到大于int的值。

LinkedList等更多案例也为您提供了超过Integer.MAX_VALUEList个元素数量的可能性。