Я написал этот код, чтобы сократить список слов до длинного количества слов, начинающихся с буквы «А». Я просто пишу его, чтобы изучить Java 8, поэтому я хотел бы понять его немного лучше [Отказ от ответственности: я понимаю, что это, вероятно, не лучший способ написать этот код; это просто для практики!].
Long countOfAWords = results.stream().reduce(
0L,
(a, b) -> b.charAt(0) == 'A' ? a + 1 : a,
Long::sum);
Средний параметр/лямбда (называемый аккумулятором), по-видимому, способен сократить полный список без окончательного параметра «Объединитель». На самом деле, Javadoc фактически говорит:
Функция {@code accumulator} действует как объединенный преобразователь и аккумулятор, * что иногда может быть более эффективным, чем раздельное сопоставление и преобразование, * например, когда знание ранее уменьшенного значения позволяет избежать * некоторых вычислений.
[Редактировать от автора] – следующее утверждение неверно, так что пусть оно вас не смущает; Я просто оставлю это здесь, чтобы не испортить первоначальный контекст ответов.
В любом случае, я могу сделать вывод, что аккумулятор должен просто выводить 1 и 0, которые объединяет объединитель. Однако я не нашел это особенно очевидным из документации.
Мой вопрос
Есть ли способ увидеть, что будет на выходе до того, как объединитель выполнит, чтобы я мог видеть список 1 и 0, которые объединяет объединитель? Это было бы полезно при отладке более сложных ситуаций, с которыми, я уверен, я столкнусь в конце концов.
long countOfAWords=results.stream().filter(x->x.charAt(0)=='A').count();
? - person Holger   schedule 04.05.2015