Есть ли в Java какая-нибудь возможность внутри foreach-цикла определить является ли текущий элемент первым/последним? Во время отладки видны переменные-счётчики типа $i, но как до них достучаться?
Здравствуйте, vitorg, Вы писали:
V>Есть ли в Java какая-нибудь возможность внутри foreach-цикла определить является ли текущий элемент первым/последним? Во время отладки видны переменные-счётчики типа $i, но как до них достучаться?
Enhanced foreach loop это всего лишь синтаксический сахар для интерфейса Iterator. Если нужно использовать методы итератора то их стоит использовать явно. В чем бенефиты от хака затрудняющего чтение кода?
Здравствуйте, Blazkowicz, Вы писали:
B>Enhanced foreach loop это всего лишь синтаксический сахар для интерфейса Iterator. Если нужно использовать методы итератора то их стоит использовать явно. В чем бенефиты от хака затрудняющего чтение кода?
Я в курсе, что такое foreach, но ИМХО его использование как раз облегчает чтение кода. Не хотелось бы здесь спорить о бенефитах foreach, больше интересуют ответы по сути вопроса.
Здравствуйте, vitorg, Вы писали:
B>>Enhanced foreach loop это всего лишь синтаксический сахар для интерфейса Iterator. Если нужно использовать методы итератора то их стоит использовать явно. В чем бенефиты от хака затрудняющего чтение кода?
V>Я в курсе, что такое foreach, но ИМХО его использование как раз облегчает чтение кода. Не хотелось бы здесь спорить о бенефитах foreach, больше интересуют ответы по сути вопроса.
По моему все предельно ясно — либо while\for либо разного рода хаки.
Здравствуйте, vitorg, Вы писали:
V>Я в курсе, что такое foreach, но ИМХО его использование как раз облегчает чтение кода. Не хотелось бы здесь спорить о бенефитах foreach, больше интересуют ответы по сути вопроса.
Ответ — по хорошему никак. Можно с помощью хаков конечно (перед вызовом forEach посчитать число элементов, и это проверять), или еще как исхитриться, но оно надо? В 100 раз более нечитабельно получится, чем при обычном использовании итератора в стиле Java 1.4. Если уж красоты хочется, ну оберни ты это красиво, например :
public static void main(String[] args) {
List lst = getTestList();
Iterator it = lst.iterator();
final StringBuffer result = new StringBuffer();
IteratorWrapper.wrap(it).forEach(new Action() {
public void execute(Object value, Iterator it) {
result.append(value.toString());
if (it.hasNext()) {
result.append(",");
}
}
});
print(result.toString());
}
Только счетчиком, считая количество пройденных итераций. Вам уже правильно написали — незачем использовать молоток там, где нужен перфоратор. Хотя и можно, конечно.