您可以为此使用skip。
返回跳过第一个 numberToSkip 元素的 iterable 视图。
例如,以下将为您提供一个跳过前两个元素的 Iterable,然后将其限制为接下来的五个:
List<Integer> list = [0, ..., 10];
Iterable<Integer> iterable = Iterables.limit(Iterables.skip(list, 2), 5); //[2, 3, 4, 5, 6]
请注意,参数不被视为索引,而是被视为要跳过(或限制)的元素的数量。但是,如果您知道要跳过多少个元素,则很容易计算结束索引。
import static com.google.common.collect.Iterables.limit;
import static com.google.common.collect.Iterables.skip;
...
static <T> Iterable<T> bounded(Iterable<T> iterable, int startIndex, int lastIndex) {
return limit(skip(iterable, startIndex+1), lastIndex-startIndex);
}
bounded(list, 2, 5)//[3, 4, 5]
只有在底层数据结构使用索引(例如ArrayList)对其元素进行排序时,后者才有意义。
但它也可能是HashSet,并且在HashSet 中的给定索引处开始和停止是没有意义的,因为它是无序的(即不要指望limit(skip(mySet, 2), 5) 会为您提供元素3, 4, 5回)
使用java-8,您可以使用新的 Stream API,它也有那些跳过和限制方法。
static <T> Iterable<T> bounded(Iterable<T> iterable, int startIndex, int lastIndex) {
return StreamSupport.stream(iterable.spliterator(), false)
.skip(startIndex+1)
.limit(lastIndex-startIndex)
.collect(Collectors.toList());
}