Skip to content

Commit f1f964a

Browse files
Copilotbrunoborges
andauthored
Add Russian translations for streams patterns
Translate 11 stream pattern content files from German to Russian under translations/content/ru/streams/. YAML structure and keys are preserved exactly; only text values and emojis (unchanged) are translated. Files added: - collectors-flatmapping.yaml - optional-ifpresentorelse.yaml - optional-or.yaml - predicate-not.yaml - stream-gatherers.yaml - stream-iterate-predicate.yaml - stream-mapmulti.yaml - stream-of-nullable.yaml - stream-takewhile-dropwhile.yaml - stream-tolist.yaml - virtual-thread-executor.yaml Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>
1 parent c06f483 commit f1f964a

11 files changed

+212
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
title: Collectors.flatMapping()
2+
oldApproach: Вложенный flatMap
3+
modernApproach: flatMapping()
4+
summary: Использование flatMapping() для сглаживания внутри группирующего Collector.
5+
explanation: Collectors.flatMapping() применяет отображение «один ко многим» в качестве
6+
нижестоящего Collector. Это эквивалент Collector для Stream.flatMap() — полезен
7+
внутри groupingBy или partitioningBy.
8+
whyModernWins:
9+
- icon: 🧩
10+
title: Компонуемый
11+
desc: Работает как нижестоящий Collector внутри groupingBy.
12+
- icon: 📐
13+
title: Один проход
14+
desc: Сглаживание и группировка за один проход Stream.
15+
- icon: 🔗
16+
title: Вкладываемый
17+
desc: Сочетается с другими нижестоящими Collectors.
18+
support:
19+
description: Широко доступно с JDK 9 (сент. 2017)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
title: Optional.ifPresentOrElse()
2+
oldApproach: if/else с Optional
3+
modernApproach: ifPresentOrElse()
4+
summary: Обработка обоих случаев Optional — наличие и отсутствие значения — в одном
5+
вызове.
6+
explanation: ifPresentOrElse() принимает Consumer для случая наличия значения и Runnable
7+
для случая пустого Optional. Устраняет антипаттерн isPresent/get.
8+
whyModernWins:
9+
- icon: 📏
10+
title: Единое выражение
11+
desc: Оба случая обрабатываются в одном вызове метода.
12+
- icon: 🚫
13+
title: Без get()
14+
desc: Устраняет опасный паттерн isPresent() + get().
15+
- icon: 🔗
16+
title: Цепочный
17+
desc: Естественно связывается после findUser() или любого метода, возвращающего Optional.
18+
support:
19+
description: Широко доступно с JDK 9 (сент. 2017)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
title: Optional.or() как запасной вариант
2+
oldApproach: Вложенный запасной вариант
3+
modernApproach: Цепочка .or()
4+
summary: Цепочка запасных вариантов Optional без вложенных проверок.
5+
explanation: Optional.or() возвращает исходный Optional, если он содержит значение,
6+
в противном случае вычисляет Supplier для получения альтернативного Optional.
7+
Supplier-ы ленивы — они вызываются только при необходимости.
8+
whyModernWins:
9+
- icon: 🔗
10+
title: Цепочный
11+
desc: Выстраивать запасные варианты в читаемый пайплайн.
12+
- icon:
13+
title: Ленивое вычисление
14+
desc: Supplier запасного варианта выполняется только при необходимости.
15+
- icon: 📖
16+
title: Декларативный
17+
desc: "Читается как 'попробуй основное, или вторичное, или по умолчанию'."
18+
support:
19+
description: Широко доступно с JDK 9 (сент. 2017)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
title: Predicate.not() для отрицания
2+
oldApproach: Отрицание через лямбду
3+
modernApproach: Predicate.not()
4+
summary: Использование Predicate.not() для чистого отрицания ссылок на методы вместо
5+
написания лямбда-обёрток.
6+
explanation: До Java 11 для отрицания ссылки на метод требовалась её обёртка в лямбду.
7+
Predicate.not() позволяет напрямую отрицать любой предикат, что делает код читаемым
8+
и согласованным со стилем ссылок на методы во всём пайплайне Stream.
9+
whyModernWins:
10+
- icon: 👁
11+
title: Чистое отрицание
12+
desc: Не нужны лямбда-обёртки для ссылок на методы только ради отрицания.
13+
- icon: 🔗
14+
title: Компонуемый
15+
desc: Работает с любым Predicate и позволяет строить чистые цепочки предикатов.
16+
- icon: 📖
17+
title: Естественно читаемый
18+
desc: Predicate.not(String::isBlank) читается как естественный язык.
19+
support:
20+
description: Доступно с JDK 11 (сентябрь 2018).
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
title: Stream Gatherers
2+
oldApproach: Пользовательский Collector
3+
modernApproach: gather()
4+
summary: Использование Gatherers для пользовательских промежуточных операций Stream.
5+
explanation: Gatherers — это новая промежуточная операция Stream, позволяющая выражать
6+
сложные преобразования, такие как скользящие окна, группы фиксированного размера
7+
и операции сканирования, которые были невозможны со стандартными операциями Stream.
8+
whyModernWins:
9+
- icon: 🧩
10+
title: Компонуемый
11+
desc: Gatherers сочетаются с другими операциями Stream.
12+
- icon: 📦
13+
title: Встроенные операции
14+
desc: "windowFixed, windowSliding, fold, scan доступны из коробки."
15+
- icon: 🔧
16+
title: Расширяемый
17+
desc: Написание собственных Gatherers для любых промежуточных преобразований.
18+
support:
19+
description: "Финализировано в JDK 24 (JEP 485, март 2025)."
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
title: Stream.iterate() с предикатом
2+
oldApproach: iterate + limit
3+
modernApproach: iterate(seed, pred, op)
4+
summary: Использование предиката для завершения итерации — как цикл for в виде Stream.
5+
explanation: "Трёхаргументный Stream.iterate(seed, hasNext, next) работает как цикл\
6+
\ for: seed — начальное значение, hasNext определяет остановку, next генерирует\
7+
\ следующее значение."
8+
whyModernWins:
9+
- icon: 🎯
10+
title: Естественная остановка
11+
desc: Остановка по условию, а не по произвольному ограничению.
12+
- icon: 📐
13+
title: Эквивалент цикла for
14+
desc: Та же семантика, что у for(seed; hasNext; next).
15+
- icon: 🛡️
16+
title: Нет риска бесконечного Stream
17+
desc: Предикат гарантирует завершение.
18+
support:
19+
description: Широко доступно с JDK 9 (сент. 2017)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
title: Stream.mapMulti()
2+
oldApproach: flatMap + List
3+
modernApproach: mapMulti()
4+
summary: Вывод нуля или более элементов на входной элемент без создания промежуточных
5+
Stream.
6+
explanation: mapMulti() — императивная альтернатива flatMap, которая избегает создания
7+
промежуточных объектов Stream для каждого элемента. Эффективнее, когда отображение
8+
порождает небольшое количество элементов.
9+
whyModernWins:
10+
- icon:
11+
title: Меньше аллокаций
12+
desc: Не создаётся промежуточный Stream для каждого элемента.
13+
- icon: 🎯
14+
title: Императивный стиль
15+
desc: Использование циклов и условий напрямую.
16+
- icon: 📐
17+
title: Гибкий
18+
desc: Вывод нуля, одного или нескольких элементов с полным контролем.
19+
support:
20+
description: Широко доступно с JDK 16 (март 2021)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
title: Stream.ofNullable()
2+
oldApproach: Проверка на null
3+
modernApproach: ofNullable()
4+
summary: Создание Stream с нулём или одним элементом из nullable-значения.
5+
explanation: Stream.ofNullable() возвращает однопоточный Stream, если значение не
6+
null, или пустой Stream, если оно null. Устраняет паттерн тернарной проверки на
7+
null.
8+
whyModernWins:
9+
- icon: 📏
10+
title: Краткость
11+
desc: Один вызов заменяет тернарное выражение.
12+
- icon: 🔗
13+
title: flatMap-совместимый
14+
desc: Отлично подходит внутри flatMap для пропуска null-значений.
15+
- icon: 🛡️
16+
title: Null-безопасный
17+
desc: Нет риска NPE — null превращается в пустой Stream.
18+
support:
19+
description: Широко доступно с JDK 9 (сент. 2017)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
title: Stream takeWhile / dropWhile
2+
oldApproach: Ручной цикл
3+
modernApproach: takeWhile/dropWhile
4+
summary: Брать или пропускать элементы из Stream на основе предиката.
5+
explanation: takeWhile() возвращает элементы, пока предикат истинен, и останавливается
6+
при первом ложном значении. dropWhile() пропускает элементы, пока предикат истинен,
7+
и возвращает остальные. Оба лучше работают с упорядоченными Stream.
8+
whyModernWins:
9+
- icon: 🎯
10+
title: Оценка с коротким замыканием
11+
desc: Прекращает обработку, как только предикат не выполняется.
12+
- icon: 🔗
13+
title: Совместимый с пайплайном
14+
desc: Естественно связывается с другими операциями Stream.
15+
- icon: 📖
16+
title: Декларативный
17+
desc: "takeWhile читается как естественный язык: 'брать, пока меньше 100'."
18+
support:
19+
description: Широко доступно с JDK 9 (сент. 2017)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
title: Stream.toList()
2+
oldApproach: Collectors.toList()
3+
modernApproach: .toList()
4+
summary: Терминальный toList() заменяет многословный collect(Collectors.toList()).
5+
explanation: "Stream.toList() возвращает неизменяемый список. Это эквивалент\
6+
\ .collect(Collectors.toUnmodifiableList()), но гораздо короче. Примечание: результат\
7+
\ неизменяем, в отличие от Collectors.toList()."
8+
whyModernWins:
9+
- icon: 📏
10+
title: 7 символов против 24
11+
desc: .toList() заменяет .collect(Collectors.toList()).
12+
- icon: 🔒
13+
title: Неизменяемый
14+
desc: Результирующий список нельзя изменить.
15+
- icon: 📖
16+
title: Fluent
17+
desc: Читается естественно в конце пайплайна.
18+
support:
19+
description: Широко доступно с JDK 16 (март 2021)

0 commit comments

Comments
 (0)