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

აქ:

  • მარცხენა სიიდან სწრაფი ძიებისთვის შექმნილია ლექსიკი (Map) მარჯვენა სიიდან.
  • მარცხენა სიას გადის, თითოეული კლივისთვის ეძებს შესაბამის მნიშვნელობას ლექსიკში.
  • თუ იპოვება, ქმნის Triple-ს და შედეგში აგზავნის.

ეს შეესაბამება SQL-ის შეკითხვას, რომელიც ახორციელებს JOIN-ს კლივ K-ზე.