Junior — Middle
91
Дар кадом тартиб ва кай вақт зангҳои усулҳо мувофиқи шартнома дар занҷираи Stream сурат мегиранд, махсусан онҳое, ки ҳамчун ғайриохирӣ эълон шудаанд?
Ширкатҳо дар куҷо пурсиданд
DCloud
Ҷавоб аз AI
sobes.tech AI
В Java Stream API методы делятся на промежуточные (нетерминальные) и терминальные. Промежуточные методы, такие как filter(), map(), sorted(), не выполняют обработку сразу, а лишь формируют конвейер операций — они ленивы. Терминальный метод, например, collect(), forEach(), reduce(), запускает выполнение цепочки.
Порядок вызовов по контракту:
- Промежуточные методы вызываются для построения цепочки, но не обрабатывают элементы.
- Когда вызывается терминальный метод, начинается проход по источнику данных.
- Элементы проходят через всю цепочку промежуточных операций по одному, последовательно.
- Для каждого элемента вызываются все промежуточные операции в порядке их объявления.
Например:
List<String> list = List.of("a1", "a2", "b1", "c2", "c1");
list.stream()
.filter(s -> s.startsWith("c")) // промежуточный
.map(String::toUpperCase) // промежуточный
.forEach(System.out::println); // терминальный
Здесь сначала создается цепочка, а при вызове forEach происходит проход по элементам, для каждого вызывается filter, затем map, и результат выводится.
Таким образом, промежуточные методы вызываются лениво и по элементам, терминальный — инициирует обработку.