Java Stream limit()方法详解
Stream limit(n)用于从Stream中检索一定数量的元素,但数量不能超过n。limit()方法返回一个新的Stream,由给定Stream中的元素组成,截断后长度不超过maxSize。
1.Stream limit()方法
1.1.语法:
Stream<T> limit(long maxSize)
在这里maxSize是Stream应该限制的元素数量,而方法的返回值是一个由从原始Stream中提取的元素组成的新Stream。
1.2.描述
- Stream.limit()方法是一种短路中间操作。中间操作是短路操作,当遇到无限输入时,它可能产生一个有限的结果Stream。请注意,终端操作是短路操作,当遇到无限输入时,它可能在有限的时间内终止。
- 它返回一个由当前Stream的最大元素组成的Stream,长度不超过给定值。
- 一般来说,limit()是一种高效的操作,但有时如果maxSize值很大且Stream是并行处理的,则可能很低效。
- 使用无序的Stream源(如generate(Supplier))或用BaseStream.unordered()去除顺序约束可以在并行管道中显著提高limit()的速度。
- limit()按遇到顺序返回前n个元素。
2.Stream limit()示例
示例1:从无限偶数流中获取前10个偶数
在以下示例中,我们使用iterate()方法创建一个无限流。然后我们使用limit(10)方法获取前10个偶数。
最后,我们使用collect(Collectors.toList())方法将流中的偶数收集到列表中。
Stream<Integer> evenNumInfiniteStream = Stream.iterate(0, n -> n + 2); List<Integer> newList = evenNumInfiniteStream.limit(10) .collect(Collectors.toList()); System.out.println(newList);//[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
3.skip()和limit()之间的差异
- limit(N)方法返回前N个元素,按遇到顺序。
- skip(N)丢弃Stream的前N个元素。
List<Integer> list = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) .skip(6) .collect(Collectors.toList()); System.out.println(newList); //[7, 8, 9, 10]
4.结论
Java 8 Stream 的 limit() 方法在某些情况下非常有用,当我们需要从流中获取元素,并且在运行时确定元素的数量时。
事实上,它按遇到顺序返回元素,这使得它在正常的业务用例中非常有用。