Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public static <T> StreamEx<List<T>> slide(List<T> source, int size) {
return IntStreamEx.range(source.size()-size+1).mapToObj(idx -> source.subList(idx, idx+size));
}slide(input, 2).filter(list -> list.get(0) < list.get(1)).map(list -> list.get(0)).toList();@FunctionalInterface
public interface ResultSetMapper<T>
{
T map(ResultSet rs) throws SQLException;
}
public static <T> StreamEx<T> stream(Connection c, String query, ResultSetMapper<T> transformer) {...}Seq.reverse, который вычитывает поток в список и по этому списку создаёт новый поток (причём всегда последовательный вне зависимости от исходного). То есть это и не intermediate, и не terminal операция. Лучше уж коллектор написать типа toReverseList(). forEach и LongAdder и посмотреть, сколько это займёт. Может, на восьмёрке и будет быстрее. Вообще на практике count не очень часто нужен.Но придётся писать эту операцию для четырёх типов потока
Ваш Сплитератор разделит поток [a, b, c, d] так [a, b], [b, c], [c, d]. А хочется, чтобы было так [a, b], [c, d]. Т.е. на один шаг больше.
Что же такое сплитератор
Сплитератор — это интерфейс, который содержит 8 методов, причём четыре из них уже имеют реализацию по умолчанию. Оставшиеся методы ...
Spliterator — это начинка потока, публичная часть его внутренней логики
Добавьте ещё пример с массивами в бенчмарк для указанной задачи. Чисто интересно, насколько проверки границ массива влияют
Пишем свой Spliterator