Skip to content

Commit bf4d08e

Browse files
committed
Терминальные методы - Количество, ДляКаждого, Минимум, Максимум, Сократить
1 parent c07deca commit bf4d08e

File tree

2 files changed

+106
-0
lines changed

2 files changed

+106
-0
lines changed

src/Классы/Поток.os

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,102 @@
8585
КонецЦикла;
8686

8787
Возврат Результат;
88+
89+
КонецФункции
90+
91+
Функция Количество() Экспорт
92+
93+
Лог.Отладка("Количество");
94+
95+
ПройтиКонвейер();
96+
97+
Результат = Коллекция.Количество();
98+
99+
Возврат Результат;
100+
101+
КонецФункции
102+
103+
Функция ДляКаждого(ОписаниеОповещения) Экспорт
104+
105+
Лог.Отладка("ДляКаждого");
106+
107+
ПройтиКонвейер();
108+
109+
Результат = Новый Массив;
110+
ДополнительныеПараметры = Новый Структура;
111+
ДополнительныеПараметры.Вставить("Обработчик", ОписаниеОповещения);
112+
113+
ВыполнитьОбработать(Результат, ДополнительныеПараметры);
114+
115+
Возврат Результат;
116+
117+
КонецФункции
118+
119+
Функция Минимум(ОбработчикСравнения = Неопределено) Экспорт
120+
121+
Лог.Отладка("Минимум");
122+
123+
Если ОбработчикСравнения = Неопределено Тогда
124+
ОбработчикСравнения = СтандартныйОбработчикСравнения();
125+
КонецЕсли;
126+
127+
ПройтиКонвейер();
128+
129+
Результат = Новый Массив;
130+
ДополнительныеПараметры = Новый Структура;
131+
ДополнительныеПараметры.Вставить("Обработчик", ОбработчикСравнения);
132+
133+
ВыполнитьСортировать(Результат, ДополнительныеПараметры);
134+
135+
Если Результат.Количество() = 0 Тогда
136+
Возврат Неопределено;
137+
Иначе
138+
Возврат Результат[0];
139+
КонецЕсли;
140+
141+
КонецФункции
142+
143+
Функция Максимум(ОбработчикСравнения = Неопределено) Экспорт
144+
145+
Лог.Отладка("Максимум");
146+
147+
Если ОбработчикСравнения = Неопределено Тогда
148+
ОбработчикСравнения = СтандартныйОбработчикСравнения();
149+
КонецЕсли;
150+
151+
ПройтиКонвейер();
152+
153+
Результат = Новый Массив;
154+
ДополнительныеПараметры = Новый Структура;
155+
ДополнительныеПараметры.Вставить("Обработчик", ОбработчикСравнения);
156+
157+
ВыполнитьСортировать(Результат, ДополнительныеПараметры);
158+
159+
Если Результат.Количество() = 0 Тогда
160+
Возврат Неопределено;
161+
Иначе
162+
Возврат Результат[Результат.Количество() - 1];
163+
КонецЕсли;
164+
165+
КонецФункции
166+
167+
Функция Сократить(Обработчик, НачальноеЗначение = Неопределено) Экспорт
168+
169+
Лог.Отладка("Сократить");
170+
171+
ПройтиКонвейер();
172+
173+
Результат = НачальноеЗначение;
174+
Для Каждого Элемент Из Коллекция Цикл
175+
Если Обработчик.ДополнительныеПараметры = Неопределено Тогда
176+
Обработчик.ДополнительныеПараметры = Новый Структура;
177+
КонецЕсли;
178+
Обработчик.ДополнительныеПараметры.Вставить("Элемент", Элемент);
179+
ОписанияОповещений.ВыполнитьОбработкуОповещения(Обработчик, Результат);
180+
КонецЦикла;
181+
182+
Возврат Результат;
183+
88184
КонецФункции
89185

90186
// Служебные процедуры и функции

test.os

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,14 @@
1212
Сообщить("Я - операция map, и это мое послание миру: элемент " + Элемент + " превратился в " + Результат);
1313
КонецПроцедуры
1414

15+
Процедура ОбработчикСокращения(Результат, ДополнительныеПараметры) Экспорт
16+
Элемент = ДополнительныеПараметры.Элемент;
17+
Результат = Результат + Элемент;
18+
КонецПроцедуры
19+
1520
ФункцияФильтрации = ОписанияОповещений.Создать("ОбработчикФильтрации", ЭтотОбъект);
1621
ФункцияОбработки = ОписанияОповещений.Создать("ОбработчикОбработки", ЭтотОбъект);
22+
ФункцияСокращения = ОписанияОповещений.Создать("ОбработчикСокращения", ЭтотОбъект);
1723

1824
Массив = Новый Массив;
1925
Массив.Добавить(3);
@@ -59,3 +65,7 @@
5965
Для Каждого Элемент Из Результат Цикл
6066
Сообщить(Элемент);
6167
КонецЦикла;
68+
69+
Стрим = Потоки.ИзКоллекции(Массив);
70+
Результат = Стрим.Обработать(ФункцияОбработки).Сократить(ФункцияСокращения, 0);
71+
Сообщить(Результат);

0 commit comments

Comments
 (0)