Sobes.tech
Senior

/* SELECTIE links.K, links.V1, rechts.V2 VAN links JOIN rechts ON 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 eerste; private B tweede; Pair(A eerste, B tweede) { this.eerste = eerste; this.tweede = tweede; } } private static class Triple<A, B, C> { private A eerste; private B tweede; private C derde; Triple(A eerste, B tweede, C derde) { this.eerste = eerste; this.tweede = tweede; this.derde = derde; } }

sobes.tech AI

Antwoord van AI

Hieronder wordt een implementatie van de join-functie gegeven, die een inner join uitvoert van twee lijsten van paren op de sleutel K. Voor efficiëntie wordt een Map gebruikt om snel de bijbehorende elementen uit de tweede lijst te zoeken.

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:

  • Er wordt een woordenboek gemaakt van de rechterlijst voor snelle zoekopdrachten op de sleutel.
  • De linker lijst wordt doorlopen, voor elke sleutel wordt de bijbehorende waarde in het woordenboek gezocht.
  • Als gevonden, wordt een Triple gemaakt en aan het resultaat toegevoegd.

Dit komt overeen met een SQL-query met JOIN op de sleutel K.