In diesem Artikel werde ich Ihnen einige Möglichkeiten zeigen, wie Sie die in Map gespeicherten Schlüssel und Werte unabhängig von der Implementierung in einem iterativen Prozess abrufen können. Die Zielgruppe dieses Artikels sind hauptsächlich Anfänger bis Fortgeschrittene.
Ich denke, dass es viele Situationen gibt, in denen Sie die Datenstruktur einer Liste wie "ArrayList" oder "LinkedList" verwenden, um eine Reihe von Informationen beim Programmieren zu verwalten. Wenn Sie jedoch die Datenstruktur von Map beherrschen, können Sie leicht kompliziertere Probleme lösen. Ich möchte, dass Sie lernen, wie man es benutzt, weil Sie damit umgehen können.
Die folgenden Methoden werden hauptsächlich verwendet, um Schlüssel und Werte aus einer Sammlung von Kartenstrukturen während der iterativen Verarbeitung abzurufen.
--Verwenden Sie "EntrySet" --Verwenden Sie die Methode "forEach (BiConsumer <T, U>)" (JDK 1.8 oder höher).
Es ist Ihnen jetzt vielleicht nicht vertraut, aber Sie können die in der Karte gespeicherten Schlüssel und Werte in einem iterativen Prozess einfach mithilfe von "EntrySet" abrufen.
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public final class TestEntrySet {
public static void main(String[] args) {
final Map<String, String> testMap = new HashMap<>(3);
testEntrySet.put("test1", "value1");
testEntrySet.put("test2", "value2");
testEntrySet.put("test3", "value3");
final Set<Entry<String, String>> testEntrySet = testMap.entrySet();
for (Map.Entry<String, String> entry : testEntrySet) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
}
}
Im obigen Beispielcode wird die in HashMap
implementierte Test Map deklariert, die Testwerte werden gesetzt und dann wird die entrySet ()
-Methode aufgerufen.
Sie können ein "EntrySet" vom Typ "Set <Entry <String, String >>" erhalten, indem Sie die Methode "entrySet ()" aufrufen. Verwenden Sie das hier in der erweiterten for-Anweisung erhaltene "EntrySet". Natürlich erhalten Sie im obigen Beispielcode vor der Iteration das "EntrySet", aber Sie können auch das "EntrySet" erhalten, wenn Sie die Erweiterung für wie unten gezeigt verwenden.
//Holen Sie sich EntrySet, wenn Sie eine erweiterte for-Anweisung definieren
for (Map.Entry<String, String> entry : testMap.entrySet()) {
}
Sie können den in der Map gespeicherten Schlüssel mithilfe der Methode "getKey ()" im iterativen Prozess und den in der Map gespeicherten Wert mithilfe der Methode "getValue ()" abrufen.
Daher wird das Ausführungsergebnis des obigen Beispielcodes wie folgt ausgegeben.
test1
value1
test2
value2
test3
value3
Vielleicht ist diese Methode, die die Methode "forEach ()" verwendet, jetzt mehr Mainstream als der iterative Prozess, der das zuvor eingeführte "EntrySet" verwendet. Diese forEach ()
-Methode ist eine relativ neue Methode, die in JDK1.8 mit der zusätzlichen Funktionsschnittstelle implementiert wurde, und sie ist jetzt intuitiver zu iterieren als EntrySet
.
import java.util.HashMap;
import java.util.Map;
public final class TestForEach {
public static void main(String[] args) {
final Map<String, String> testMap = new HashMap<>(3);
testEntrySet.put("test1", "value1");
testEntrySet.put("test2", "value2");
testEntrySet.put("test3", "value3");
//BiConsumer als Argument<T, U>Übergeben Sie einen Lambda-Ausdruck, der implementiert wird
testMap.forEach((key, value) -> {
System.out.println(key);
System.out.println(value);
});
}
}
Auf den ersten Blick werden Sie feststellen, dass es prägnanter ist als die EntrySet-Methode.
Der Punkt, der schwierig erscheint, ist das Argument, aber dem Argument der Methode "forEach ()" wird ein Lambda-Ausdruck übergeben, der die Funktionsschnittstelle "BiConsumer <T, U>" implementiert. Ich werde den Lambda-Ausdruck und die Funktionsschnittstelle weglassen, da sie vom Zweck dieses Artikels abweichen. Wenn Sie jedoch die Methode "forEach ()" in Map verwenden, ist es in Ordnung, wenn Sie sich daran erinnern, wie der obige Beispielcode geschrieben wurde.
Der im Lambda-Ausdruck angegebene Variablenname kann beliebig geändert werden. Im Fall des obigen Beispielcodes wird der Kartenschlüssel in "Schlüssel" und der Kartenwert in "Wert" gespeichert.
Daher ist das Ausführungsergebnis des obigen Beispielcodes wie bei Verwendung von "EntrySet".
test1
value1
test2
value2
test3
value3
Aufgrund der Eigenschaften der Funktionsschnittstelle "BiConsumer <T, U>" ist es nicht möglich, während der iterativen Verarbeitung mit der Methode "forEach ()" einen Rückgabewert zurückzugeben. Einige Funktionsschnittstellen geben einen Wert zurück, aber die Methode "forEach ()" wiederholt einfach den Vorgang für die Größe der Karte.
Wenn Sie beispielsweise "false" als booleschen Wert zurückgeben möchten, wenn bei wiederholter Map-Verarbeitung ein Fehler festgestellt wird, empfehlen wir die Verwendung von "EntrySet" anstelle von "forEach ()".
Recommended Posts