Sobes.tech
Senior

/* SELECIONAR esquerda.K, esquerda.V1, direita.V2 DE esquerda JUNTE direita EM esquerda.K = direita.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> esquerda, List<Pair<K, V2>> direita) { return null; } private static class Pair<A, B> { private A primeiro; private B segundo; Pair(A primeiro, B segundo) { this.primeiro = primeiro; this.segundo = segundo; } } private static class Triple<A, B, C> { private A primeiro; private B segundo; private C terceiro; Triple(A primeiro, B segundo, C terceiro) { this.primeiro = primeiro; this.segundo = segundo; this.terceiro = terceiro; } }

sobes.tech IA

Resposta da IA

A seguir apresenta-se uma implementação da função join, que realiza uma junção interna (inner join) de duas listas de pares por chave K. Para maior eficiência, é utilizado um Map para procurar rapidamente os elementos correspondentes da segunda 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;
}

Aqui:

  • É criado um dicionário a partir da lista da direita para buscas rápidas por chave.
  • Percorre-se a lista da esquerda, procurando no dicionário o valor correspondente para cada chave.
  • Se encontrado, cria-se um Triple e adiciona-se ao resultado.

Isto corresponde a uma consulta SQL com JOIN pela chave K.