TGViewer
Java: fill the gaps Java: fill the gaps @java_fillthegaps · 12.3K subscribers
Post #524 13.5K
Java 21: sequenced collections
или "фича, которая опоздала на 25 лет".

19 сентября выходит java 21, и среди прочего там будет JEP 431: Sequenced Collections.

В чём суть изменений?

В JDK добавится новый интерфейс SequencedCollection. В него войдут методы, которые должны были появиться в джаве ещё в 98 году. Простые операции, для которых каждый раз пишется маленький велосипедик🚲

♨️ Пример 1: получить последний элемент в списке

Сейчас это так:
last = list.get(list.size() - 1);

В java 21 наконец-то появится специальный метод:
last = list.getLast();

♨️ Пример 2: пройти список в обратном порядке

Сейчас это так:
for(int i=list.size(); i>0; i--){
int value = list.get(i));
}

Выглядит жутко. Альтернатива — использовать Collections.reverse:

List<Integer> reversed = new ArrayList<>(list);
Collections.reverse(reversed);
reversed.forEach(…);

Выглядит симпатичнее, но здесь море лишних действий: создаём новую(!) коллекцию, переставляем её элементы и только потом делаем обход.

В java 21 всё гораздо проще:
list.reversed().forEach(…)

Метод reversed не меняет исходную коллекцию и возвращает view с обратным порядком обхода.

♨️ Пример 3: обойти LinkedHashSet

LinkedHashSet — список с уникальными элементами. Хотя это список, класс реализует только интерфейс Set. Поэтому работы с индексами нет вообще.

Получить первый элемент ещё можно:
first = linkedHashSet.iterator().next();

А вот последний — никак, надо полностью обходить структуру. Код писать не буду, слишком громоздкий.

В java 21 те же операции выполняются легко и просто:
first = linkedHashSet.getFirst();
last = linkedHashSet.getLast();

Резюме

В java 21 появится интерфейс SequencedCollection с методами
▫️ SequencedCollection<E> reversed()
▫️ void addFirst(E)
▫️ void addLast(E)
▫️ E getFirst()
▫️ E getLast()
▫️ E removeFirst()
▫️ E removeLast()

Плюс интерфейсы SequencedSet и SequencedMap с тем же функционалом.

Новые методы появятся в ArrayList, LinkedList, HashSet, LinkedHashMap, LinkedHashSet, частично в TreeSet и некоторых других классах.

Было бы здорово увидеть эти методы 25 лет назад, но лучше поздно, чем никогда:)
  • 👍 225
  • 🔥 74
  • ❤ 21
More from @java_fillthegaps
  1. Apr 30, 2026Get Your Hands Dirty on Clean Architecture: отзыв на книгу Когда я подняла тему чистой арх…
  2. Apr 27, 2026​Clean Architecture: отзыв на книгу Наконец-то дочитала книгу Clean Architecture Роберта М…
  3. Mar 4, 2026Как переиспользовать контекст в интеграционных тестах Сегодня расскажу базовый минимум для…
  4. Mar 4, 2026Post #660
  5. Mar 4, 2026Тестовый контекст поднимается 2 минуты. У нас 4 класса с интеграционными тестами, их конфи…
  6. Feb 25, 2026Чистая архитектура. Главы 3-5 Продолжаем спидран по Clean Architecture Роберта Мартина. ⭐️…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →