Sobes.tech
Senior

/* SEÇİM sol.K, sol.V1, sağ.V2 FROM sol JOIN sağ ON sol.K = sağ.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> sol, List<Pair<K, V2>> sağ) { return null; } private static class Pair<A, B> { private A ilk; private B ikinci; Pair(A ilk, B ikinci) { this.ilk = ilk; this.ikinci = ikinci; } } private static class Triple<A, B, C> { private A ilk; private B ikinci; private C uc; Triple(A ilk, B ikinci, C uc) { this.ilk = ilk; this.ikinci = ikinci; this.uc = uc; } }

sobes.tech Süni İntellekt

AI-dan cavab

Aşağıda, K açarına görə iki cütlük siyahısının daxili birləşməsini (inner join) həyata keçirən join funksiyasının tətbiqi verilmişdir. Effektivlik üçün, ikinci siyahıdakı uyğun elementləri tez tapmaq üçün Map istifadə olunur.

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

Burada:

  • Sağ siyahıdan açara görə sürətli axtarış üçün lüğət (Map) yaradılır.
  • Sol siyahı üzərində keçid edilir, hər açar üçün lüğətdə uyğun dəyər axtarılır.
  • Əgər tapılırsa, Triple yaradılır və nəticəyə əlavə olunur.

Bu, K açarına əsaslanan JOIN ilə SQL sorğusuna uyğundur.