Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public static <T> StreamEx<T> fold(StreamEx<T> input, T identity, BinaryOperator<T> op) {
return input.headTail((head, tail) -> fold(tail, op.apply(identity, head), op), () -> Stream.of(identity));
}Collectors.mapping(mapper, Collectors.toList()). Это не ленивая операция, она сразу в массив собирает. Её к бесконечному стриму не применишь, короткое замыкание после неё не устроишь.new Random(1).doubles(10000).mapToObj(String::valueOf).collect(Collectors.toList());input.stream().map(x -> x).collect(Collectors.summingInt(String::length))HeadTailTest.htSimple avgt 30 1371,840 ± 32,914 us/op
HeadTailTest.jdkSimple avgt 30 80,933 ± 5,080 us/opinput.stream().map(x -> x.replaceAll("[123]", "")).collect(Collectors.toList());HeadTailTest.htComplex avgt 30 7819,082 ± 208,534 us/op
HeadTailTest.jdkComplex avgt 30 5999,423 ± 148,727 us/opfor. Берут и пользуются, потому что удобнее.То есть вы бы не стали добавлять в язык регулярные выражения из опасения, что люди будут пихать их где ни попадя?
Операции couples, withIndices, slides, batches в некотором виде есть, если источник — список со случайным доступом. Для произвольного списка нету.
У меня в обзоре много операций, которых нет в Stream API и в StreamEx
Как вы сами сказали, в вашей библиотеке только операции, обладающие некоторыми критериями качества
Stream API: универсальная промежуточная операция