Senior
/* IZBOR levo.K, levo.V1, desno.V2 IZ levo JOIN desno ON levo.K = desno.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> levo, List<Pair<K, V2>> desno) { return null; } private static class Pair<A, B> { private A prvi; private B drugi; Pair(A prvi, B drugi) { this.prvi = prvi; this.drugi = drugi; } } private static class Triple<A, B, C> { private A prvi; private B drugi; private C treći; Triple(A prvi, B drugi, C treći) { this.prvi = prvi; this.drugi = drugi; this.treći = treći; } }
sobes.tech АИ
Одговор од АИ
Испод је дата имплементација функције 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.