Какие сложные или специфические операции со стримами в Java вы использовали, кроме map и filter?
Что проверяют
Пишете ли вы на стримах что-то сложнее учебных примеров и знаете ли, что появилось после Java 8. Следом обычно просят написать группировку прямо на собеседовании или спрашивают, когда стрим хуже обычного цикла.
Как отвечать
Называйте операции вместе с задачей, где они пригодились:
groupingByс downstream-коллектором:groupingBy(Order::status, counting()),mapping(...),summingLong(...). Классика отчётов: заказы по статусам, суммы по клиентам;partitioningBy: делит по предикату на две группы, оба ключа есть в результате всегда;toMapс merge-функцией: без третьего аргумента повтор ключа даётIllegalStateException, аnullв значении даётNullPointerException;flatMapиmapMulti(Java 16): разворачивают вложенные данные, второй обходится без промежуточного стрима;Collectors.teeing(Java 12): два коллектора за один проход, например минимум и максимум сразу;takeWhile,dropWhile,Stream.iterateс условием (Java 9): остановка на первом несовпадении в упорядоченных данных;Stream.toList()(Java 16): корочеcollect(Collectors.toList()), но возвращает неизменяемый список;- примитивные стримы:
mapToInt(...).sum()иsummaryStatistics()без упаковки вInteger; - Stream Gatherers (финальные с Java 24):
gather(Gatherers.windowSliding(3))для скользящих окон, а такжеfold,scan,mapConcurrent.
Назовите и границы: peek годится только для отладки, а count() при известном размере источника может вообще не выполнить промежуточные операции; parallel() работает на общем ForkJoinPool и редко окупается на коротких коллекциях и блокирующих вызовах.
Где спотыкаются
Приводят reduce для суммы. Пример рабочий, но слабый: mapToInt(...).sum() понятнее, а reduce с тремя аргументами требует ассоциативного комбинатора, о чём кандидаты молчат.
Меняют внешнюю коллекцию из peek или forEach, то есть делают побочные эффекты внутри стрима. С parallel() это превращается в гонки.
Строят цепочку из десяти операций там, где цикл на пять строк понятнее, и не могут объяснить выбор ничем, кроме «так современнее».