Чем отличаются методы Stream.map
и Stream.flatMap
друг от друга?
И map
и flatMap
могут быть применены к стриму Stream<T>
и оба возвращают стрим Stream<R>
. Разница заключается в том, что операция map
создает одно выходное значение для каждого входного значения, тогда как операция flatMap
создает произвольное число(ноль или больше) значений для каждого входного значения.
Операция map
(О работе map
на русском) в качестве аргумента принимает Function
(например, лямбду), которая вызывается для каждого значения входного стрима(который <T>
), преобразует это значение в другое значение, и посылает получившееся значение в выходной стрим(который <R>
).
Т.е. map
для каждого объекта в стриме возвращает по 1 объекту, потом преобразует все объекты в итоговый стрим.
Операция flatMap
(О работе flatMap
на русском) принимает функцию (которая преобразует каждое значение входного стрима в стрим), применяет ее к каждому элементу, и на выходе возвращает стрим с одним, несколькими или ни c одним из элементов для каждого элемента входящего стрима.
Т.е., flatMap
возвращает по стриму для каждого объекта в первоначальном стриме, а затем результирующие потоки объединяются в исходный стрим.
Пример для map
: есть одномерный массив array
с числами. Нужно получить массив из первоначального массива, в котором к каждому числу прибавлена 1.
Решение:
array = Arrays.stream(array) //преобразовываем массив в стрим
.map(i -> i+1) //преобразовываем каждый элемент стрима
.toArray(); //преобразовываем стрим в массив
map
к каждому значению стрима прибавляет 1, потом все новые значения преобразует в итоговый стрим.
Пример для flatMap
: есть двухмерный array
с числами, надо получить одномерный массив с числами.
Решение:
secondArray = Arrays.stream(array)
.flatMapToInt(i -> Arrays.stream(i)) //преобразовываем Stream<int[]> в Stream
.toArray(); // преобразовываем Stream в int[]
В этом примере создается стрим состоящий из каждого элемента первоначального массива - т.е. стрим из массивов. Потом с помощью i -> Arrays.stream(i)
преобразовываем каждый элемент(который является массивом) стрима в стрим с числами. После этого flatMap
собирает все получившееся стримы в один итоговый стрим.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем доброго времени сутокЯвляясь полнейшим профаном в программировании в целом я наткнулся на сайт http://strolen
Только начала изучать Java, возникает ошибка "Polynom( ) in Polynom cannot be applied to (float[], double)" во втором кодеМожете объснить, что она значит и как её исправить?...
Делаю Progressbar и paintComponent должен по чуть-чуть заполнять полосуНаписал следующие методы: