Sobes.tech
Senior

/* PASIRINKIMAS kairė.K, kairė.V1, dešinė.V2 IŠ kairės PRISIJUNGIMAS dešinė ON kairė.K = dešinė.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> kairė, List<Pair<K, V2>> dešinė) { return null; } private static class Pair<A, B> { private A pirmas; private B antras; Pair(A pirmas, B antras) { this.pirmas = pirmas; this.antras = antras; } } private static class Triple<A, B, C> { private A pirmas; private B antras; private C trečias; Triple(A pirmas, B antras, C trečias) { this.pirmas = pirmas; this.antras = antras; this.trečias = trečias; } }

sobes.tech AI

Atsakymas iš AI

Žemiau pateikta funkcijos join įgyvendinimo versija, kuri atlieka vidinį sujungimą (inner join) dviejų porų sąrašų pagal raktą K. Efektyvumui naudojama Map, kad greitai surastų atitinkančius elementus iš antro sąrašo.

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

Čia:

  • Sukuriamas žodynas iš dešiniojo sąrašo greitam paieškai pagal raktą.
  • Peržiūrima kairioji sąrašo dalis, kiekvienam raktui ieškoma atitinkama reikšmė žodyne.
  • Jei randama, sukuriamas Triple ir pridedamas prie rezultato.

Tai atitinka SQL užklausą su JOIN pagal raktą K.