Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как взять первые 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() — Возвращает часть списка между двумя индексами.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.