Как взять первые N элементов
Короткий ответ
limit() оставляет в потоке первые N элементов:
void main() {
var scores = List.of(95, 88, 76, 64, 51);
IO.println(scores.stream().limit(3).toList());
}Результат:
[95, 88, 76]Топ после сортировки
Вместе с sorted() получаются «три лучших»:
void main() {
var scores = List.of(64, 95, 51, 88, 76);
IO.println(scores.stream().sorted(Comparator.reverseOrder()).limit(3).toList());
}Результат:
[95, 88, 76]Пропустить элементы
skip() пропускает первые N элементов:
void main() {
var lines = List.of("header", "row 1", "row 2");
IO.println(lines.stream().skip(1).toList());
}Результат:
[row 1, row 2]Пока условие верно
takeWhile() берёт элементы, пока условие истинно, и останавливается на первом неподходящем:
void main() {
var temperatures = List.of(12, 15, 18, 9, 20);
IO.println(temperatures.stream().takeWhile(t -> t > 10).toList());
}Результат:
[12, 15, 18]Частая ошибка
Взять subList(0, n) у списка, который короче n. В отличие от limit(), subList() не прощает выход за границы:
void main() {
var scores = List.of(95, 88);
IO.println(scores.stream().limit(3).toList());
IO.println(scores.subList(0, 3));
}Результат:
[95, 88]
Exception in thread "main" java.lang.IndexOutOfBoundsException: toIndex = 3Функции из этого ответа
- Stream.limit() — Обрезает поток до первых N элементов.
- Stream.skip() — Пропускает первые N элементов потока.
- Stream.takeWhile() — Берёт элементы, пока выполняется условие, и останавливается на первом неподходящем.
- List.subList() — Возвращает часть списка между двумя индексами.