for-each для собственного класса
import java.util.Iterator;
import java.util.List;
public class IterableExample {
public static void main (String[] args) {
Row row = new Row(List.of(new Cell("text1"), new Cell("text2"), new Cell("text3")));
for (Cell cell : row) {
System.out.println(cell.text);
}
}
static class Row implements Iterable<Cell> {
private List<Cell> cells;
public Row(List<Cell> cells) {
this.cells = cells;
}
@Override
public Iterator<Cell> iterator() {
// в данном случаем можно было просто отдать cells.iterator();
return new Iterator<>() {
private int index = 0;
@Override
public boolean hasNext() {
return index < cells.size();
}
@Override
public Cell next() {
return cells.get(index++);
}
};
}
}
static class Cell {
String text;
public Cell(String text) {
this.text = text;
}
}
}
В Java цикл for-each позволяет перебирать элементы массивов, коллекций и других итерируемых объектов без необходимости использовать индексы или итераторы. Однако, для того чтобы вы могли использовать for-each для перебора элементов своего собственного класса, этот класс должен реализовать интерфейс Iterable и предоставить метод iterator(), возвращающий объект, реализующий интерфейс Iterator.
В результате можно использовать for-each для перебора элементов этого класса, как если бы это был обычный массив или коллекция.
Вы можете адаптировать этот пример для своих собственных классов, реализуя интерфейс Iterable и предоставив соответствующий итератор, чтобы использовать for-each для вашего класса.