Sobes.tech
Senior

/* TANLASH chap.K, chap.V1, o'ng.V2 dan chap JOIN o'ng ON chap.K = o'ng.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> chap, List<Pair<K, V2>> o'ng) { return null; } private static class Pair<A, B> { private A bir; private B ikkinchi; Pair(A bir, B ikkinchi) { this.bir = bir; this.ikkinchi = ikkinchi; } } private static class Triple<A, B, C> { private A bir; private B ikkinchi; private C uch; Triple(A bir, B ikkinchi, C uch) { this.bir = bir; this.ikkinchi = ikkinchi; this.uch = uch; } }

sobes.tech AI

AIdan javob

Quyida, K kalitiga asoslangan ikkita juftliklar ro'yxatining ichki birlashishini (inner join) amalga oshiradigan join funktsiyasining amalga oshirilishi keltirilgan. Samaradorlik uchun, ikkinchi ro'yxatdan mos elementlarni tezda qidirish uchun Map ishlatiladi.

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

Bu yerda:

  • O'ng ro'yxatdan kalit bo'yicha tez qidirish uchun lug'at (Map) yaratiladi.
  • Chap ro'yxat bo'yicha o'tiladi, har bir kalit uchun lug'atda mos qiymat qidiriladi.
  • Agar topilsa, Triple yaratiladi va natijaga qo'shiladi.

Bu SQL so'roviga K kalitiga asoslangan JOIN bilan mos keladi.