Sobes.tech
Senior

/* SELEZIONA sinistra.K, sinistra.V1, destra.V2 DA sinistra JOIN destra ON sinistra.K = destra.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> sinistra, List<Pair<K, V2>> destra) { return null; } private static class Pair<A, B> { private A primo; private B secondo; Pair(A primo, B secondo) { this.primo = primo; this.secondo = secondo; } } private static class Triple<A, B, C> { private A primo; private B secondo; private C terzo; Triple(A primo, B secondo, C terzo) { this.primo = primo; this.secondo = secondo; this.terzo = terzo; } }

sobes.tech AI

Risposta dell'AI

Di seguito è riportata un'implementazione della funzione join, che esegue una join interna (inner join) di due liste di coppie per la chiave K. Per efficienza, viene utilizzata una mappa per cercare rapidamente gli elementi corrispondenti della seconda lista.

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

Qui:

  • Si crea un dizionario dalla lista di destra per una ricerca rapida per chiave.
  • Si attraversa la lista di sinistra, cercando in dizionario il valore corrispondente per ogni chiave.
  • Se trovato, si crea un Triple e si aggiunge al risultato.

Questo corrisponde a una query SQL con JOIN sulla chiave K.