1 简介
本文将讲解Java 8 Stream中的两个方法:skip()和limit()。这两个方法是Stream很常用的,不仅各自会被高频使用,还可以组合出现,并能实现一些小功能,如subList和分页等。
2 skip()方法
见名知义,skip()方法用于跳过前面n个元素,然后再返回新的流
List<Integer> result = Stream.of(1, 2, 3, 4, 5, 6)
.skip(4)
.collect(Collectors.toList());
List<Integer> expected = asList(5, 6);
assertEquals(expected, result);
方法skip()的参数n的四种情况:
(1)当n<0时,抛IllegalArgumentException异常;
(2)当n=0时,相当没有跳过任何元素,原封不动、完璧归赵;
(3)当0<n<length时,跳过n个元素后,返回含有剩下的元素的流;
(4)当n>=length时,跳过所有元素,返回空流。
3 limit()方法
对于limit()方法,它是用于限制流中元素的个数,即取前n个元素,返回新的流
List<Integer> result = Stream.of(1, 2, 3, 4, 5, 6)
.limit(4)
.collect(Collectors.toList());
List<Integer> expected = asList(1, 2, 3, 4);
assertEquals(expected, result);
方法limit()的参数n的四种情况:
(1)当n<0时,抛IllegalArgumentException异常;
(2)当n=0时,不取元素,返回空流;
(3)当0<n<length时,取前n个元素,返回新的流;
(4)当n>=length时,取所有元素,原封不动、完璧归赵
4 组合应用
5.1 与subList的替换
集合类如List是有subList()这个方法的,可以截取List中的某一部分,这个功能还可以通过组合skip()和limit()使用得到,如下面代码:
List<Integer> list = asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
List<Integer> expected = list.subList(3, 7);
List<Integer> result = list.stream()
.skip(3)
.limit(7 - 3)
.collect(Collectors.toList());
assertEquals(expected, result);
5.2 分页
可以通过组合使用skip()和limit()进行分页,如下面代码:
int pageSize = 10;
int pageIndex = 7;
List<Integer> expected = asList(61, 62, 63, 64, 65, 66, 67, 68, 69, 70);
List<Integer> result = Stream.iterate(1, i -> i + 1)
.skip((pageIndex - 1) * pageSize)
.limit(pageSize)
.collect(Collectors.toList());
assertEquals(expected, result);
5 总结
本文介绍了Java 8的Stream接口中两个常用的方法:skip()和limit(),比较简单易懂,也介绍了怎么组合使用。需要注意的是,如果Stream过大或是无限流,小心skip()会有性能问题。
本文详细介绍了Java8 Stream接口中的skip()和limit()方法,包括它们各自的参数情况及组合应用。skip()用于跳过指定数量的元素,limit()则用于限制返回流中的元素数量。通过这两者的组合,可以实现类似List的subList功能以及分页操作。在实际使用中,需要注意对于大流或无限流,skip()可能带来性能问题。



1069

被折叠的 条评论
为什么被折叠?



