Q: ... понять, можно ли переписать ...
Да, это возможно, но сильно обескуражен. Пожалуйста, примите это к сведению и помните, что java-stream не является заменой 1: 1 для for-loop в большинстве случаев.
В: ... почему мы можем исключить потоки здесь с самого начала ...
Потоки вообще не подходят для повторного использования индексов или их повторного использования. Идея Stream является монадой и подходит для обхода коллекции / массива один раз и получения объявленного вывода.
Существует способ использования IntStream::range
в качестве замены для итерации по массиву с использованием индексов, однако это дает нереальное преимущество для решения и, кроме того, значительно более многословный и менее ясный. Кроме того, я не могу представить себе решение, которое в принципе не нарушает ключевые принципы Streams :
- Невмешательство
- поведение без гражданства
- Без побочных эффектов
Типичные сценарии использования для java-stream - это фильтрация, выравнивание / отображение, редукция, сбор в коллекцию или группирование в Map
с использованием или без использования операций агрегации и т. Д ... Они также подходят для параллельной обработки.