Java8流:为什么Stream.skip(long n)方法使用long而不是int作为参数?
这里是流的跳过方法的示例: skip(long n)返回由 在丢弃流的前n个元素后,此流将被删除 我的问题是为什么参数是Java8流:为什么Stream.skip(long n)方法使用long而不是int作为参数?,java,java-stream,Java,Java Stream,这里是流的跳过方法的示例: 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","
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
}
}
导入java.util.array;
导入java.util.List;
公共班机{
公共静态void main(字符串[]args){
List stringList=Arrays.asList(“1”、“1”、“2”、“3”、“4”);
stream()
.跳过(2)
.forEach(System.out::print);//将打印234
}
}
有时您可能希望在无限流上跳过,在这种情况下,您可能需要一个大于int
类型所能容纳的最大值的数字。因此,让这样一个方法接受尽可能大的整数是完全有意义的。另外,正如所评论的,它与count()
一致。当然,有人会说我们可以同时拥有count()
和skip()
返回/接受一个int
但为了利用流,有时我们可能需要能够容纳尽可能大的整数的类型。这是因为流
并不总是来自像数组列表
这样的集合,其中最大长度为整数。MAX_值
,但也可以通过文件为每行,实际上使流可能达到大于int
的值
更多类似于LinkedList
的情况还提供了在列表中超过Integer.MAX\u VALUE
元素数的可能性,因为并非所有列表都限制为Integer.MAX\u VALUE
元素数。
例如,LinkedList
因为流可能很大吗?@LouisWasserman我首先想到的是int的大小,但我不确定这是否是实现此功能的设计师的原因。这与count()
@JoopEggen true一致,我会在答案中包括这一点。你正确地指出了流可以是无限长的!ArrayList是否限制为Integer.MAX_值?如果我再加上更多,会发生什么?是否有控件?@Aguid yes,ArrayList
限制为Integer.MAX\u VALUE
。当尝试添加更多元素时,您将得到一个IndexOutOfBounds
异常。考虑到LinkedList
的每元素开销,期望这样一个列表的值大于Integer.MAX\u值是不现实的,但流不需要集合作为输入:LongStream.range(0,Integer.MAX_VALUE+1000L).boxed()
或Stream.iterate(0L,l->l+1)
,例如…如果LinkedList.size()的大小大于Integer.MAX_VALUE,它的结果会是什么?(LinkedList是一个列表)@Aguid