Свертка значений потока в Java
Метод reduce сворачивает поток в одно
значение: сумму, произведение, самую длинную строку.
Передают функцию, которая объединяет накопленный
результат с очередным элементом.
Сумму чисел можно получить так:
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = List.of(3, 8, 1, 12, 5);
int total = nums.stream()
.filter(n -> n > 4)
.reduce(0, Integer::sum);
System.out.println(total);
}
}
Форма без начального значения возвращает
Optional. Она подходит, когда пустой
поток должен дать пустой ответ, а не ноль:
import java.util.List;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
List<Integer> nums = List.of(4, 5, 6);
Optional<Integer> max = nums.stream()
.reduce(Integer::max);
System.out.println(max.orElse(0));
}
}
Дан код:
var nums = List.of(1, 2, 3, 4, 5);
Посчитайте произведение всех чисел с начальным значением 1.
Дан код:
var strings = List.of("go", "java", "io");
Сложите их длины в одно число и выведите результат.