[JAVA] Bequeme Verwendung von Map, die Sie nicht unerwartet kennen

Verwendung der Sammlung

Es ist übertrieben zu sagen, dass es fast unabdingbar ist, beim Programmieren in Java Sammlungen wie List, Map und Set zu verwenden. Unter anderem kann Map Daten im Schlüsselwertformat verwalten. Daher wird sie häufig in Szenen verwendet, z. B. um Daten im Voraus zu erfassen, in Map zu packen und wiederzuverwenden.

Insbesondere aus Java8 wurden Stream-API, Lambda-Ausdruck, Optional usw. hinzugefügt, um die Verwendung der Sammlung zu vereinfachen. Aber wussten Sie, dass hinter diesen zusätzlichen Funktionen tatsächlich viele nützliche Methoden stehen? Hier sind einige nützliche Methoden.

Erhalten Sie den Anfangswert, wenn keine Daten abgerufen werden können! (getOrDefaut)

Angenommen, Sie haben eine Karte mit Punkten, die für jeden Mitgliedscode im Geschäft verwendet werden können.

Map<String, Integer> pointMap = new HashMap<>();

Wenn Sie beispielsweise 0 Punkte zurückgeben möchten, wenn ein Mitglied keine Punkte enthält, können Sie diese wie folgt erhalten.

int point = 0;

//Erhalten Sie Punkte, wenn Sie Punkte halten
if (pointMap.containsKey(code)) {
    point = pointMap.get(code);
}

Es ist mühsam und nicht schön, jedes Mal zu beurteilen. Hier kommt getOrDefault ins Spiel.

int point = pointMap.getOrDefault(code, 0);

Sie könnten es ordentlich in einer Zeile schreiben. Sie können Code wie diesen schreiben, wenn Sie einen Wert erhalten möchten, wenn die Karte keinen Wert hat.

Nur einstellen, wenn Sie den Wert nicht halten! (putIfAbsent)

Angenommen, Sie schreiben eine Logik, um nur Mitgliedern Punkte zu geben, die noch keine Punkte für die Punktinformationen haben.

//Wenn Sie keine Punkte halten, geben Sie Punkte
if (!pointMap.containsKey(code)) {
    pointMap.put(code, point);
}

In Java 8 können Sie dies wie folgt schreiben:

pointMap.putIfAbsent(code, point);

In diesem Code wird der Punkt nur festgelegt, wenn dem Element kein Punkt zugeordnet ist.

Wenn der Wert nicht gehalten wird, setzen Sie den Anfangswert! (computeIfAbsent)

Angenommen, Sie haben eine Karte, die einen Verlauf der Testergebnisse eines Schülers hinzufügt und enthält.

Map<String, List<Integer>> scoreMap = new HashMap<>();

Wenn es einen Schüler gibt, der bereits eine Punktzahl hat, wird nach dieser Punktzahl eine neue Punktzahl als Verlauf hinzugefügt.

List<Integer> scores = scoreMap.get(code);

//Wenn die Punktzahl des Schülers noch nicht aufgezeichnet wurde
if (scores == null) {
    //Erstellen Sie eine Liste für einen neuen Verlauf
    scores = new ArrayList<>();
    scoreMap.put(code, scores);
}

scores.add(score);

Wenn Sie es nicht von Map erhalten können, müssen Sie List festlegen und dieser Liste Punkte hinzufügen. Sie können dies mit computeIfAbsent wie folgt schreiben:

scoreMap.computeIfAbsent(code, k -> new ArrayList<>()).add(score);

Wenn keine Schülertestergebnisse beibehalten werden, wird eine neue Liste erstellt, und wenn bereits Ergebnisse vorhanden sind, wird die vorhandene Liste zurückgegeben. Da die Punkte der zurückgegebenen Liste hinzugefügt werden, kann in einer Zeile geschrieben werden.

Werte manipulieren, wenn sie erhalten bleiben! (computeIfPresent)

Angenommen, Sie haben eine Karte mit den Anwesenheitstagen der Schüler, die eine Klasse besucht haben, und der Schülercode der Schüler, die an dem Kurs teilnehmen, und die Anwesenheitstage von 0 werden als Anfangswerte eingegeben.

Map<String, Integer> attendanceMap = new HashMap<>();

Wenn Schüler nicht am Unterricht teilnehmen, sondern kommen, werden sie ignoriert, und Schüler, die am Unterricht teilnehmen, erhöhen die Anzahl der Tage, an denen ein Teilnehmer teilnimmt.

if (attendanceMap.containsKey(code)) {
    attendanceMap.put(code, attendanceMap.get(code) + 1) ;
}

Sie können dies mit computeIfPresent wie folgt schreiben:

attendanceMap.computeIfPresent(code, (k, v) -> v + 1);

computeIfPresent unternimmt nichts, wenn der Studentencode nicht die entsprechenden Anwesenheitstage enthält, und kann den Wert (Anwesenheitstage) nur erhöhen, wenn der entsprechende Schüler vorhanden ist.

Zusammenfassung

Java 8 hat viele Funktionen wie Stream- und Lambda-Ausdrücke hinzugefügt, aber tatsächlich gibt es viele weitere nützliche Funktionen. Es ist gut, im Internet nach der API zu suchen, die Sie benötigen, wenn Sie sie benötigen, aber es ist auch interessant, die offizielle API-Dokumentation so zu lesen, wie Sie ein Wörterbuch lesen würden.

Recommended Posts

Bequeme Verwendung von Map, die Sie nicht unerwartet kennen
Unerwartet unbekannte Java-Zusammenfassung für reservierte Wörter
Benötigen Sie eine speicherbewusste Implementierung von Java?
Bequeme Verwendung von Map, die Sie nicht unerwartet kennen
[Java] Der Unterschied zwischen den Methoden Stream.of () und Arrays.stream (), den Sie nicht unerwartet kennen
Kennst du Decorator?
So ersetzen Sie Zeichen, die Sie nicht verstehen [Prinzip]
[Java] Verwenden Sie nicht "+" im Anhang!
Verwenden Sie Stream in Java?
Wie schreibt man in Scala, die in Java geschrieben wurde? (Liste → Karte)
So funktioniert @Transactional, das nicht funktioniert, wenn Sie es falsch verwenden
[Spring Boot] Wenn Sie Spring Boot verwenden, war es praktisch, viele Dienstprogramme zu verwenden.
Verwenden Sie doch die for-Anweisung? Verwenden Sie die while-Anweisung? Ordnungsgemäße Verwendung von for-Anweisung und while-Anweisung