Код: Выделить всё
Stream.of("a", "b", "err1", "c", "d", "err2", "e", "f", "g", "h", "err3", "i", "j");
Я подумал примерно так
Код: Выделить всё
Map map = new HashMap();
Stream.of("a", "b", "err1", "c", "d", "err2", "e", "f", "g", "h", "err3", "i", "j")
.reduce((acc, next) -> {
if (acc.startsWith("err"))
map.put(acc,next);
if (next.startsWith("err"))
return next;
else
return "";
});
- Я «неправильно использую» функцию сокращения. В Stream API каждая функция имеет свое четкое, четко определенное назначение: max должен вычислять максимальное значение, filter должен фильтровать на основе условия, сокращение должно создавать постепенно накапливаемое значение и так далее.
- Это мешает мне использовать мощные механизмы Streams: что, если я хочу ограничить свой поиск первыми двумя результатами?
Есть ли более простой способ? Что-то, что позволяет вам перебирать поток, учитывая более одного значения для каждой итерации?
Я имею в виду некий механизм, который, учитывая текущий элемент, позволяет вам определить «окно элементов» для рассмотрения для каждой итерации.
Что-то вроде
Код: Выделить всё
Stream mapMoreThanOne(
int elementsBeforeCurrent,
int elementsAfterCurrent,
Function
Подробнее здесь: [url]https://stackoverflow.com/questions/34086461/is-there-a-way-to-iterate-a-java-stream-taking-two-elements-a-time-instead-of-on[/url]
Мобильная версия