В процессе, чтобы получить мои руки в потоках Java 8, следующее упражнение остановило меня.Java-потоки с состоянием - тривиальное упражнение
С учетом
IntStream.range(0, 6)
. Производят струнный поток ниже:"0, 1" "1, 2" "2, 3" "3, 4" "4, 5"
Я думал использовать Collectors.collectAndThen, чтобы передать его в старый добрый список или массив и петля для построения списка строк следующим образом:
List<String> strgs = new ArrayList<>();
String prev = String.valueOf(nums[0]);
for (int i = 1; i < nums.length; i++) {
strgs.add(prev+", "+String.valueOf(nums[i]));
prev = String.valueOf(nums[i]);
}
Но он не использует силу потоков. Я чувствовал, что Венкат Субраманиам говорит: «Я чувствовал, что принимаю душ после». Я хочу знать, как применять функциональные методы, поэтому я могу пропустить принятие душа после кодирования!
Кроме того, я хотел бы избегать библиотек, таких как StreamEx или JavaRx, я хочу придерживаться простых API Java 8.
Редактировать: @Tunaki, спасибо, что указал на неясную формулировку в моем вопросе. Это пара, состоящая из двух последовательных элементов Потока. Более бетон, поток как [1, 3, 5, 7, 9, ...]
будет
"1, 3"
"3, 5"
"5, 7"
...
Edit 2
После салютуя ответы на все вопросы, хотя мой вопрос является дубликатом на другой вопрос, как отметил Tunaki. Я хочу расширить обсуждение сообщества для ответа, внесенного богемским языком. Хотя его ответ был недоволен некоторыми, он вызывает серьезную проблему, которая уменьшает действие с побочными эффектами. Моя просьба к сообществу - предоставить разумный счетчик действительной методики. Таким образом, я хочу, чтобы повторно использовать Bohemian ответ следующим образом:
Учитывая вход: НУМС = новый INT [] {1,3,5,7,9}
Пожалуйста, обратите внимание сниппет ниже:
List<CharSequence> stringList = new ArrayList<>();
IntBinaryOperator reductionWithSideEffect = (int left, int right) -> {
stringList.add(new StringBuilder().append(left).append(", ").append(right));
return right;
};
Arrays.stream(nums)
.reduce(reductionWithSideEffect);
System.out.println(String.join(", ", stringList));
Взгляните на этот вопрос: http://stackoverflow.com/q/20470010/1743880. Проще говоря, это не то, для чего был разработан Stream API. – Tunaki
Откуда взялось это упражнение? –
@Stuart Marks, это моя адаптация упражнения старых массивов, с помощью которого я хотел оспорить понимание Streams. Я очень приветствую ваш ответ в вопросе, связанном с комментарием Тунаки. Это близко к ручьям младшего, как я. – Sam