Ошибка в коде при использовании for-each | Java
Помогите пожалуйста разобраться, почему при передаче reverse(list) в цикл for each компилятор выдает ошибку ?
public class Example {
public static Iterator<String> reverse(List<String> list) {
Collections.reverse(list);
return list.iterator();
}
public static void main(String[] args) {
List<String> list = List.of("1", "2", "3");
for (String str : reverse(list))
System.out.print(str + ", ");
}
}
Ответы (2 шт):
Автор решения: Дмитрий
→ Ссылка
Потому что конструкция foreach не принимает интерфейс Iterator, она принемает интерфейс Iterable, который является вершиной иерархии для всех коллекций Java, кроме Map. Посему вам не нужно вызывать итератор у листа, вам нужно менять сигнатуру метода и передавать туда сам лист.
public class Example {
public static Iterable<String> reverse(List<String> list) {
Collections.reverse(list);
return list;
}
public static void main(String[] args) {
List<String> list = List.of("1", "2", "3");
for (String str : reverse(list)) {
System.out.print(str + ", ");
}
}
}
Автор решения: Дмитрий Алексеенко
→ Ссылка
Но есть принципиально через итератор, то тут надо немного поменять
public static Iterator<String> reverse(List<String> list)
{
Collections.reverse(list);
return list.iterator();
}
public static void main(String[] args)
{
String[] arrStr = new String[]
{
"1", "2", "3"
};
List<String> list = Arrays.asList(arrStr);
Iterator<String> strItr = reverse(list);
while (strItr.hasNext())
{
System.out.print(strItr.next() + ", ");
}
System.out.println("");
}
так делать не обязательно, просто у меня нету метода of
String[] arrStr = new String[]
{
"1", "2", "3"
};
List<String> list = Arrays.asList(arrStr);
Iterator<String> strItr = reverse(list);