2017-01-11 2 views
7

Предположив, что у меня есть некоторый foreach цикл вроде этого:обнаружить последний цикл итерации

Set<String> names = new HashSet<>(); 

//some code 

for (String name: names) { 

    //some code 

} 

Есть ли способ, чтобы проверить внутри foreach, что фактическое именем является последним в Set без рецепта?

(Извините, если это дублирует вопрос, я не нашел здесь какой-то вопрос, как это)

+5

Нет, на интерфейсе Set такого метода нет. Эта абстракция не подразумевает порядок, только то, что это коллекция, в которой каждый элемент уникален. – duffymo

+0

Без счетчика вы просто не можете сделать это в java. – abbath

+0

PLS сказать, что вы хотите сделать, если вы знаете, что текущий элемент является последним. Имейте в виду, что для каждого из 'HashSet' не будет сохраняться заказ. – Kent

ответ

6

Существует нет, посмотрите на How does the Java 'for each' loop work?

Вы должны изменить свой цикл, чтобы использовать итератор в явном виде или ИНТ счетчика.

+0

Итератор действительно может мне помочь! Благодарю. – mhery

0

Там нет сборки в методе, чтобы проверить, если текущий элемент также является последним элементом. Кроме того, вы используете HashSet, который не гарантирует возврат заказа. Даже если вы хотите проверить это, например. с индексом i последний элемент всегда может быть другим.

0

A Set не гарантирует заказ предметов. Вы можете выполнить цикл через Set и получить «abc» как «последний элемент», и в следующий раз вы обнаружите, что «hij» - это «последний элемент» в Set.

Если вы не беспокоитесь о заказе, и вы просто хотите знать, что такое «последний элемент» при наблюдении Set в данный момент, для этого не существует встроенного способа. Вам нужно будет использовать счетчик.

4

Другие оповещения вполне адекватны, просто добавив это решение для данного вопроса.

Set<String> names = new HashSet<>(); 

    //some code 
    int i = 0; 

for (String name: names) { 
    if(i++ == names.size() - 1){ 
     // Last iteration 
    } 
    //some code 

} 
+0

Спасибо. Хорошее решение для каждого цикла проверить последнюю итерацию. Хотя это очень похоже на использование цикла for с итератором. Тем не менее, приятное решение! – NiallMitch14