Почему Итератор Java не является Повторяемым?

Вы можете выполнить удаление, используя условие where на основе результата для evid с более чем результатом

select from my_table 
where evid in (
  select  evid, count(*)
  from my_table  
  group by evid 
  having count(*) > 1 
) and roles = 'T'
172
задан Dan Hulme 28 October 2012 в 12:21
поделиться

4 ответа

Поскольку итератор обычно указывает на один экземпляр в коллекции. Итерируемость подразумевает, что можно получить итератор от объекта для прохождения по его элементам - и нет необходимости перебирать один экземпляр, который представляет собой итератор.

65
ответ дан 23 November 2019 в 20:39
поделиться

Избегать зависимости от java.util пакет

Согласно исходному JSR, расширенное для цикла для Javaв „ў Язык программирования , предложенные интерфейсы:

  • java.lang.Iterable
  • java.lang.ReadOnlyIterator
    (предложил быть модифицированным на java.util.Iterator, но по-видимому этого никогда не происходило)

†¦ были разработаны для использования java.lang пространство имен пакета, а не java.util.

Для заключения в кавычки JSR:

Эти новые интерфейсы служат для предотвращения зависимости языка на java.util, который иначе закончился бы.

<час>

Между прочим, старое java.util.Iterable получило новое forEach метод в Java 8 + для использования с синтаксисом лямбды (передающий Consumer ).

Вот пример. List интерфейс расширяется Iterable интерфейс, поскольку любой список несет forEach метод.

List
.of ( "dog" , "cat" , "bird" )
.forEach ( ( String animal ) -> System.out.println ( "animal = " + animal ) );
2
ответ дан 23 November 2019 в 20:39
поделиться

Для простоты Iterator и Iterable - это две разные концепции, Iterable - это просто сокращение от «Я могу вернуть Iterator». Я думаю, что ваш код должен быть:

for(Object o : someContainer) {
}

с someContainer instanceof SomeContainer расширяет Iterable

0
ответ дан 23 November 2019 в 20:39
поделиться

Итератор с состоянием. Идея состоит в том, что если вы вызовете Iterable.iterator () дважды, вы получите независимых итераторов - в любом случае, для большинства итераций. Это явно не будет иметь место в вашем сценарии.

Например, я обычно могу написать:

public void iterateOver(Iterable<String> strings)
{
    for (String x : strings)
    {
         System.out.println(x);
    }
    for (String x : strings)
    {
         System.out.println(x);
    }
}

Это должно напечатать коллекцию дважды - но с вашей схемой второй цикл всегда завершится мгновенно.

212
ответ дан 23 November 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: