Я использую библиотеку Google Collections AbstractIterator. для реализации генератора. При этом я столкнулся с проблемой; Я сократил его до более простого типа и воспроизвел проблему. Это сокращение явно излишне для того, что оно делает, считая от 1 до numelements через Iterable.
По сути, в следующем коде версия без комментариев работает, а версия с комментариями — нет (предоставляет нулевой элемент последним, вместо того, чтобы заканчиваться последним числом).
Я что-то не так делаю, или это проблема с библиотекой?
private Iterable<Integer> elementGenerator(final int numelements) {
return new Iterable<Integer>() {
@Override public Iterator<Integer> iterator() {
return new AbstractIterator<Integer>(){
int localcount=0;
@Override protected Integer computeNext() {
if (localcount++ == numelements) return endOfData();
return localcount;
// return (localcount++ == numelements) ? endOfData() : localcount;
}
};
}
};
}
Я также пытался возиться с расположением ?:
(например, добавляя префикс возврата и вместо этого сравнивая с +1), безрезультатно. Я немного покопался в документации по этому поводу, но ничего не нашел. Очевидно, что синтаксис ?:
— это только удобство, а не необходимость, но все же...
if (localcount++ == numelements)
идентично(localcount == numelements)
, а затем увеличивает localcount на 1. - person Powerlord   schedule 30.11.2009