Конечная операция потока в Java
Конечная операция - команда в конце цепочки, которой нужен конкретный ответ: список, число, один элемент. Именно она запускает реальный обход данных, описанных промежуточными шагами.
Один и тот же отбор можно завершить сбором списка или подсчетом длины:
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = List.of(3, 8, 1, 12, 5);
List<Integer> picked = nums.stream()
.filter(n -> n > 4)
.toList();
long amount = nums.stream()
.filter(n -> n > 4)
.count();
System.out.println(picked);
System.out.println(amount);
}
}
Метод toList материализует элементы, count
считает их без сохранения всего набора в память.
Обе команды идут по одной и той же цепочке отбора.
Другие частые конечные шаги: взять первый элемент или сложить числа через свертку:
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = List.of(3, 8, 1, 12, 5);
int top = nums.stream()
.filter(n -> n > 4)
.findFirst()
.orElse(0);
int total = nums.stream()
.filter(n -> n > 4)
.reduce(0, Integer::sum);
System.out.println(top);
System.out.println(total);
}
}
Метод findFirst останавливает обход, как только
найден подходящий элемент. Свертка проходит все
отобранные значения и накапливает итог.
Дан код:
var nums = List.of(10, 2, 7, 15, 4);
Оставьте числа не меньше семи. Выведите список отобранных значений и их количество двумя конечными командами.
Для списка List.of(1, 9, 3, 6, 11)
постройте цепочку с отбором больше пяти.
Выведите первый подходящий элемент и сумму всех
подходящих.