Senior
/* VÝBĚR vlevo.K, vlevo.V1, vpravo.V2 Z vlevo JOIN vpravo ON vlevo.K = vpravo.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> vlevo, List<Pair<K, V2>> vpravo) { return null; } private static class Pair<A, B> { private A první; private B druhý; Pair(A první, B druhý) { this.první = první; this.druhý = druhý; } } private static class Triple<A, B, C> { private A první; private B druhý; private C třetí; Triple(A první, B druhý, C třetí) { this.první = první; this.druhý = druhý; this.třetí = třetí; } }
sobes.tech AI
Odpověď od AI
Níže je uvedena implementace funkce join, která provádí vnitřní spojení (inner join) dvou seznamů párů podle klíče K. Pro efektivitu je použita Map pro rychlé hledání odpovídajících prvků z druhého seznamu.
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;
}
Zde:
- Vytvoří se slovník z pravého seznamu pro rychlé hledání podle klíče.
- Prochází se levý seznam, u každého klíče se hledá odpovídající hodnota ve slovníku.
- Pokud je nalezena, vytvoří se Triple a přidá se do výsledku.
Toto odpovídá SQL dotazu s JOIN podle klíče K.