Sobes.tech
Senior

/* KIVÁLASZTÁS bal.K, bal.V1, jobb.V2 BÓL bal JOIN jobb ON bal.K = jobb.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> bal, List<Pair<K, V2>> jobb) { return null; } private static class Pair<A, B> { private A első; private B második; Pair(A első, B második) { this.első = első; this.második = második; } } private static class Triple<A, B, C> { private A első; private B második; private C harmadik; Triple(A első, B második, C harmadik) { this.első = első; this.második = második; this.harmadik = harmadik; } }

sobes.tech MI

Válasz az MI-től

Az alábbiakban bemutatunk egy join függvény megvalósítást, amely két lista párokat tartalmazó listát köt össze belső összekapcsolással (inner join) a K kulcs szerint. Hatékonyság érdekében egy Map-et használunk, hogy gyorsan megtaláljuk a második listából a megfelelő elemeket.

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

Itt:

  • A jobb lista alapján egy szótár (Map) készül gyors kereséshez kulcs szerint.
  • A bal listán végigmegyünk, minden kulcsnál megkeressük a megfelelő értéket a szótárban.
  • Ha megtaláljuk, egy Triple-t hozunk létre, és hozzáadjuk az eredményhez.

Ez megfelel egy SQL lekérdezésnek, amely a K kulcs szerint végzi a JOIN műveletet.