Sobes.tech
Senior

/* AUSWAHL links.K, links.V1, rechts.V2 VON links JOIN rechts AUF links.K = rechts.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> links, List<Pair<K, V2>> rechts) { return null; } private static class Pair<A, B> { private A erster; private B zweiter; Pair(A erster, B zweiter) { this.erster = erster; this.zweiter = zweiter; } } private static class Triple<A, B, C> { private A erster; private B zweiter; private C dritter; Triple(A erster, B zweiter, C dritter) { this.erster = erster; this.zweiter = zweiter; this.dritter = dritter; } }

sobes.tech KI

Antwort von AI

Nachfolgend wird eine Implementierung der Funktion join gezeigt, die eine innere Verbindung (inner join) zweier Listen von Paaren nach dem Schlüssel K durchführt. Für Effizienz wird eine Map verwendet, um die entsprechenden Elemente aus der zweiten Liste schnell zu suchen.

public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> left, List<Pair<K, V2>> right) {
    Map<K, V2> rightMap = new HashMap<>();
    for (Pair<K, V2> pair : right) {
        rightMap.put(pair.first, pair.second);
    }

    List<Triple<K, V1, V2>> result = new ArrayList<>();
    for (Pair<K, V1> pairLeft : left) {
        V2 v2 = rightMap.get(pairLeft.first);
        if (v2 != null) {
            result.add(new Triple<>(pairLeft.first, pairLeft.second, v2));
        }
    }
    return result;
}

Hier:

  • Es wird ein Wörterbuch aus der rechten Liste für eine schnelle Suche nach Schlüssel erstellt.
  • Die linke Liste wird durchlaufen, für jeden Schlüssel wird der entsprechende Wert im Wörterbuch gesucht.
  • Wenn gefunden, wird ein Triple erstellt und zum Ergebnis hinzugefügt.

Dies entspricht einer SQL-Abfrage mit JOIN nach dem Schlüssel K.