Метод skip(long n) используется для пропуска n элементов. Этот метод возвращает новый поток, в котором пропущены первые n элементов.
Метод limit(long n) применяется для выборки первых n элементов потоков. Этот метод также возвращает модифицированный поток, в котором не более n элементов.
Зачастую эта пара методов используется вместе для создания эффекта постраничной навигации. Рассмотрим, как их применять:
Stream<String> phoneStream = Stream.of("iPhone 6 S", "Lumia 950", "Samsung Galaxy S 6", "LG G 4", "Nexus 7");
phoneStream.skip(1)
.limit(2)
.forEach(s->System.out.println(s));
В данном случае метод skip пропускает один первый элемент, а метод limit выбирает два следующих элемента. В итоге мы получим следующий консольный вывод:
Lumia 950 Samsung Galaxy S 6
Вполне может быть, что метод skip может принимать в качестве параметра число большее, чем количество элементов в потоке. В этом случае будут пропущены все элементы, а в результирующем потоке будет 0 элементов.
И если в метод limit передается число, большее, чем количество элементов, то просто выбираются все элементы потока.
Теперь рассмотрим, как создать постраничную навигацию:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.*;
import java.util.Scanner;
public class Program {
public static void main(String[] args) {
List<String> phones = new ArrayList<String>();
phones.addAll(Arrays.asList(new String[]
{"iPhone 6 S", "Lumia 950", "Huawei Nexus 6P",
"Samsung Galaxy S 6", "LG G 4", "Xiaomi MI 5",
"ASUS Zenfone 2", "Sony Xperia Z5", "Meizu Pro 5",
"Lenovo S 850"}));
int pageSize = 3; // количество элементов на страницу
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("Введите номер страницы: ");
int page = scanner.nextInt();
if(page<1) break; // если число меньше 1, выходим из цикла
phones.stream().skip((page-1) * pageSize)
.limit(pageSize)
.forEach(s->System.out.println(s));
}
}
}
В данном случае у нас набор из 10 элементов. С помощью переменной pageSize определяем количество элементов на странице - 3. То есть у нас получится 4 страницы (на последней будет только один элемент).
В бесконечном цикле получаем номер страницы и выбираем только те элементы, которые находятся на указанной странице.
Теперь введем какие-нибудь номера страниц, например, 4 и 2:
Введите номер страницы: 4 Lenovo S 850 Введите номер страницы: 2 Samsung Galaxy S 6 LG G 4 Xiaomi MI 5