Sobes.tech
Senior

/* Ընտրություն ձախ.K, ձախ.V1, աջ.V2 Ձախից Միացեք աջի վրա ON ձախ.K = աջ.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> ձախ, List<Pair<K, V2>> աջ) { return null; } private static class Pair<A, B> { private A առաջին; private B երկրորդ; Pair(A առաջին, B երկրորդ) { this.առաջին = առաջին; this.երկրորդ = երկրորդ; } } private static class Triple<A, B, C> { private A առաջին; private B երկրորդ; private C երրորդ; Triple(A առաջին, B երկրորդ, C երրորդ) { this.առաջին = առաջին; this.երկրորդ = երկրորդ; this.երրորդ = երրորդ; } }

sobes.tech AI

Պատասխան AI-ից

Ահա, ներկայացված է join ֆունկցիայի իրականացումը, որը իրականացնում է երկու զույգերի ցանկերի ներքին միացում (inner join) K բանալիով: Արդյունավետության համար օգտագործվում է Map՝ արագ որոնելու համար երկրորդ ցանկից համապատասխան տարրերը:

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

Այստեղ՝

  • Դուրս է բերվում բառարան աջ ցանկից՝ արագ որոնման համար բանալիով:
  • Գնահատվում է ձախ ցանկը, և յուրաքանչյուր բանալի համար որոնվում է համապատասխան արժեքը բառարանում:
  • Եթե գտնվի, ստեղծվում է Triple և ավելացվում արդյունքին:

Սա համապատասխանում է SQL հարցում, որը կատարում է JOIN K բանալու վրա։