Senior
/* Тандоо сол.K, сол.V1, оң.V2 Солдон кошуу оңго ON сол.K = оң.К; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> сол, List<Pair<K, V2>> оң) { return null; } private static class Pair<A, B> { private A биринчи; private B экинчи; Pair(A биринчи, B экинчи) { this.биринчи = биринчи; this.экинчи = экинчи; } } private static class Triple<A, B, C> { private A биринчи; private B экинчи; private C үчүнчү; Triple(A биринчи, B экинчи, C үчүнчү) { this.биринчи = биринчи; this.экинчи = экинчи; this.үчүнчү = үчүнчү; } }
sobes.tech AI
AIден жооп
Төмөндө, K ачкычына ылайык эки жуптардын тизмесин ички бириктирүү (inner join) ишке ашыратуучу join функциясынын ишке ашырылышы берилген. Эффективдүүлүк үчүн, 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 түзүлүп, натыйкага кошулат.
Бул K ачкычына негизделген JOIN менен SQL суроосуна туура келет.