Stream API Flashcards

1
Q

Stream.iterate

A

Stream.iterate(T initialValue, UnaryOperator lambda)) возвращает поток значений от начального значения до бесконечности, полученных путем применения унарного оператора.

Есть перегруженная версия Stream.iterate(T initialValue, Predicate iterationFinishCondition, UnaryOperator)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Редьюсеры стримов

A

Редьюсеры- это терминаторыстримов, которые для получения результата должны пройти через все элементы стримов (в отличие от например findFirst)

1) min, max -принимающие компаратор- возвращают Optional
2) reduce- Три версии
- T reduce(T seed, BiOperator accumulator)
- Optional reduce(BinaryOperator) -так как нет сида то возвращает optional
- T reduce(T seed, BinaryFunction accumulator, BinaryOperator combiner) - можно использовать в паралельных стримах
3) count
4) collect

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

NoSuchElementException

A

Кидается OPtional-ом при вызове get() у пустого а также при вызове orElseThrow() без аргумента

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Дефолтные convinience методы функциональных интерфейсов

A

Дефолтные convinience методы функциональных интерфейсов:
Например Predicate имеет методы or and negate принимающие другой предикатный интерфейс на вход и позволяющие по сути объединять несколько условий обозначенных в двух predicate в одном общем predicate
Function и Consumer имеют метод andThen позволяющие комбинировать их. У Function также есть compose() который результат вызова начальной функции передает как аргумент в другую функцию.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Метод collect

A

1) Принимает коллектор
2) collect(Supplier, BiConsumer accumulator, BiConsumer combiner)
Если стрим не параллельный то комбайнер может ни разу не вызваться

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Доп методы стримов примитивов (Терминальные и начальные)

A

1) Int/Long/DoubleSummaryStatistics summaryStatistics() -возвращает объект содержащий 5 значений статистики- min,max,average,count,sum
2)OptionalInt/Long/Double max(),min()
3) OptionalDouble average()
4) OptionalInt/Long/Double sum()
Статические методы (для лонг и инт):
1) range(start, end exclusive)
2)rangeCLosed(start, end inclusive)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Трансформации обычных стримов в примитивные и обратно

A

Обычный стрим в примитивный:
1)mapToInt/Long/Double(ToInt/Long/DoubleFunction) -преобразует стрим маппингом в стрим примитивов
2)flatMapToInt/Long/Double(Function)преобразует и уплощает
Примитивный стрим в обычный:
1)boxed()- в стрим соответствующих оберток
2)mapToObj(Int/Double/LongFunction)- преобразует примитивный стрим в любой объектный стрим
Примитивный стрим в примитивный стрим:
1)map(Int/Long/DoubleUnaryOperator) -преобразует примитивный стрим в стрим того же примитивного типа
2)mapToInt/Long/Double(Double/Long/IntToInt/Long/DoubleFunction) -преобразует примитивный стрим в другой примитивный стрим

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Примитивные версии Optional

A

OptionalDouble/Long/Int
методы те же, однако вместо get() имеют getAsDouble/Long/Int()
Такие примитивные Optional возвращаются в тех методах примитивных стримов, которые у обычных стримов возвращают обычные Optional

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Функциональные примитивные интерфейсы

A

Есть версии для Long/Int/Double (снизу на примере Int)и для Boolean только BooleanSupplier
-IntToLongFunction,IntFunction,ToIntFunction -для трансформаций стримов
-IntCOnsumer,IntSupplier,IntUnaryOperator,IntBinaryOperator,IntPredicate
У всех методов этих интерфейсов- если возвращается примитив, то к названию метода добавляет asInt - например appyAsInt у IntUnaryOperator

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Группирующие коллекторы

A

6) groupingBy(Function, необязательлный Supplier, иной необязательный downStreamколлектор) )создает MAP> при этом результат функции становится ключом, а значения, которые дают такой результат объединяются в списки (по умолчанию) либо в что-то определенное в необязательном ином коллекторе (например можно указать Collectors.counting тогда вместо списка будет просто количество таких элементов, либо Collectors.toSet- тогда вместо списка будет сет. Супплаер позволяет явно указать какую map создавать.
7) partitioningBy(Predicate, необязательный внутренний Collector) частный случай grouping- когда все элементы стримы делятся на две группы (всегда две, даже если в одной группе нет элементов) в зависимости от того удовлетворяют они условию предиката или нет. Возвращает Map) в котором в списке находятся элементы соответствуюие и не соответствующие предикату соовтетственно. Можно добавить внутренний коллектор, который аналогично groupingBy может задать иной порядок возврата групп элементов. Опциональого супплаера для Map в отличие от groupingBy тут нет, так как тип мапы для двух ключей не важен).
8) mapping(Function, Collector- сперва функция применяется ко всем элементам стрима, затем преобразованные функцией результаты обрабатываются коллектором. Нужен для несколько уровневого коллекторства

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Обычные коллекторы

A

1) joining(String delimiter) объединяет элементы стрима наследующие от CharSequence, разделяя их делимитером, есть перегруженная версия без делимитера.
2) averagingInt/Double/Long(ToIntFunction) возвращает среднее значений, в которые приеобразованы элементы стрима.
3) summingInt/Double/Long(ToIntFunction) возвращает сумму значений, в которые преобразованы элементы стрима.
3) maxBy/minBy(Comparator) возвращает Optional минимального и макс. значения. Существует в первую очередь для использования как downstream collector
4) summarizingInt/Double/Long(ToIntFunction) возвращает SummaryStatistic объект (хранящую мин,макс,среднее,сумму) значений, в которые преобразованы элементы стрима.
5) toMap(Function keymapper,Function valueMapper, OPTIONAL BinaryOperator , OPTIONAL Supplier mapcreator) первая функция указывает как создавать ключи из элементов стрима, вторая- как создавать значения, необязательный бинарный оператор- указывает что делать со значениями при совпадении ключей- если его нету то кидается исключение о дубле ключа, необязательный супплаер- как уточняет как создать конкретную MAP если нам нужен ее конкретный вид)
6) toList(),toSet(),toCollection(Supplier)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Названия методов функциональных интерфейсов

A

Supplier- get()
Predicate/BiPredicate - test()
Consumer/Biconsumer accept()
Функции и операторы- apply()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly