Этот вопрос определенно не повторяется, потому что я имею в виду не общую оценку после/прекремента, а конкретно использование приращения в лямбда-выражениях, что доказуемо отличается. Каждый может подтвердить, что код будет возвращать нули только там, где вы обычно ожидаете увеличения значения переменной. Ответ на этот вопрос не опубликован.
Я хорошо осведомлен о различных моментах оценки и приращения как пост-, так и префиксного приращения. Тем не менее, я не понимаю, почему это возвращает только нули:
Stream.iterate(0, e -> e++)
.limit(10)
.forEach(System.out::println);
Проверяя это, я вижу, что e инициализируется как 0 во время первой итерации, а затем увеличивается. Таким образом, вторая итерация должна дать e = 1, но, по-видимому, это не так. Что мне не хватает?
Кроме того, если я реверсирую инкремент, он работает, как и предполагалось, перечисляя все числа от 0 до 9:
Stream.iterate(0, e -> ++e)
.limit(10)
.forEach(System.out::println);
e++
возвращает предыдущее значениеe
, когда++e
возвращает обновленное значение. Таким образом,e -> e++
фактически эквивалентноe -> e
. - person Tunaki   schedule 22.04.2016e++
оценивается как старое значениеe
; это то, что он / она не понимает, почему это то, что он оценивает, а не то, какое значение имеетe
впоследствии, это важно. - person Gareth McCaughan   schedule 22.04.2016IntStream.range(0,10)
. - person Brian Goetz   schedule 22.04.2016iterate
, либо в том, как работают лямбда-выражения, и ни один из них не задается связанным вопросом и не решается ни одним из его ответов. - person Gareth McCaughan   schedule 22.04.2016e -> e++
на самом деле то же самое, чтоe -> e
, потому чтоe++
возвращает предыдущее значениеe
в соответствии с правилами постфиксного оператора, описанными в связанном вопросе. ИStream.iterate(0, e -> e)
может быть только потоком нулей. - person Tunaki   schedule 23.04.2016result++; and ++result; will both end in result being incremented by one.
Так почему нет приращения? - person AdHominem   schedule 23.04.2016