Sobes.tech
Senior

/* VALIK vasak.K, vasak.V1, parem.V2 VASAKULT LIITUMINE parem ON vasak.K = parem.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> vasak, List<Pair<K, V2>> parem) { return null; } private static class Pair<A, B> { private A esimene; private B teine; Pair(A esimene, B teine) { this.esimene = esimene; this.teine = teine; } } private static class Triple<A, B, C> { private A esimene; private B teine; private C kolmas; Triple(A esimene, B teine, C kolmas) { this.esimene = esimene; this.teine = teine; this.kolmas = kolmas; } }

sobes.tech AI

Vastus AI-lt

Allpool on esitatud funktsiooni join rakendus, mis teostab kahe paari nimekirja sisemise ühendamise (inner join) võtme K järgi. Tõhususe huvides kasutatakse Map-i, et kiiresti leida teise nimekirja vastavaid elemente.

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;
}

Siin:

  • Loob sõnastiku paremast nimekirjast kiireks otsinguks võtme järgi.
  • Läbib vasakpoolsed elemendid, iga võtme puhul otsib vastavat väärtust sõnastikust.
  • Kui leitakse, luuakse Triple ja lisatakse tulemustele.

See vastab SQL-päringule, mis teeb JOIN-i võtme K järgi.