Stream Gatherers
Использование Gatherers для пользовательских промежуточных операций Stream.
Сравнение кода
✕ Java 8
// Sliding window: manual implementation
List<List<T>> windows = new ArrayList<>();
for (int i = 0; i <= list.size()-3; i++) {
windows.add(
list.subList(i, i + 3));
}
✓ Java 24+
var windows = stream
.gather(
Gatherers.windowSliding(3)
)
.toList();
Заметили проблему в этом коде? Сообщите нам.
Почему современный подход лучше
Компонуемый
Gatherers сочетаются с другими операциями Stream.
Встроенные операции
windowFixed, windowSliding, fold, scan доступны из коробки.
Расширяемый
Написание собственных Gatherers для любых промежуточных преобразований.
Старый подход
Пользовательский Collector
Современный подход
gather()
Начиная с JDK
24
Сложность
Продвинутый
Поддержка JDK
Stream Gatherers
Доступно
Финализировано в JDK 24 (JEP 485, март 2025).
Как это работает
Gatherers — это новая промежуточная операция Stream, позволяющая выражать сложные преобразования, такие как скользящие окна, группы фиксированного размера и операции сканирования, которые были невозможны со стандартными операциями Stream.
Связанная документация
Доказательство