Если я хочу пройтись по коллекциям в HashMap:)
HashMap<Integer, Elemento>
Я бы прошел его с помощьюforeach()
также, если бы я реализовалIterator()
я не очень хорошо понимаю два способа его прохождения. Я не нахожу разницы или их функции каждого пройти через то, что я хочу пройти.
Элемент.java
package stackoverflowejemplo;
public class Elemento {
private int numeros;
private String nombre;
public Elemento(int numeros, String nombre){
this.numeros = numeros;
this.nombre = nombre;
}
public int getNumeros() {
return numeros;
}
public void setNumeros(int numeros) {
this.numeros = numeros;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String toString(){
return getNombre() +" - "+getNumeros() ;
}
}
Карта.java
import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry;
public class Mapa {
public static void main(String[] args) {
HashMap<Integer, Elemento> map = new HashMap<>();
map.put(1,new Elemento(2,"hola"));
//foreach
} }
Во-первых, в Java его нет,
for-each()
как в других языках. Что существует в Java со времен Java 5, так этоenhanced for-loop
. Что делает этот оператор за кулисами, так это использует итератор для перебора коллекции (в случае массивов вам не нужно использовать итератор).Следующий код, использующий расширенный цикл for:
Затем Java переводит его в:
Если вы хотите создать класс, который может работать с расширенным циклом for, вашему классу/интерфейсу недостаточно предоставить метод, позволяющий получить
Iterator
, он должен реализовать интерфейсIterable
. Вот пример (очень упрощенный):С приведенным выше классом вы можете использовать следующий код:
Вылет из:
Я гарантирую, что элементы, которые я печатаю, имеют метод
toString()
. Затем онforeach
гарантирует, что если у вас есть методtoString()
классаElemento.java
, в котором вы будете перебирать объектvalor
с помощью методаllave(Key)
.или таким образом:
Затем итератор я могу посмотреть здесь, чтобы понять, как он работает, и лямбда-выражение четко описано здесь .