Senior
/* IZVĒLE kreisais.K, kreisais.V1, labais.V2 NO kreisais PIESLĒGT labais ON kreisais.K = labais.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> kreisais, List<Pair<K, V2>> labais) { return null; } private static class Pair<A, B> { private A pirmais; private B otrais; Pair(A pirmais, B otrais) { this.pirmais = pirmais; this.otrais = otrais; } } private static class Triple<A, B, C> { private A pirmais; private B otrais; private C trešais; Triple(A pirmais, B otrais, C trešais) { this.pirmais = pirmais; this.otrais = otrais; this.trešais = trešais; } }
sobes.tech AI
Atbilde no AI
Zemāk ir sniegta funkcijas join realizācija, kas veic iekšējo savienojumu (inner join) starp divu pāru sarakstiem pēc atslēgas K. Efektivitātes nolūkos tiek izmantota Map, lai ātri atrastu atbilstošos elementus no otras saraksta.
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;
}
Šeit:
- Tiek izveidots vārdnīca no labās saraksta, lai ātri meklētu pēc atslēgas.
- Tiek pārbaudīts kreisais saraksts, katram atslēgas elementam tiek meklēta atbilstošā vērtība vārdnīcā.
- Ja tā ir atrasta, tiek izveidots Triple un pievienots rezultātam.
Tas atbilst SQL vaicājumam ar JOIN pēc atslēgas K.