Fix list join function n:1 problem #397

This commit is contained in:
Francis Dong
2022-01-22 15:41:45 +08:00
committed by dxfeng10
parent 338ae764ec
commit 612fd0ef61
2 changed files with 17 additions and 7 deletions

View File

@@ -148,24 +148,24 @@ public class ListFunc implements IFunc {
joinFields = new String[] {joinField, joinField};
}
Map<String, Map<String, Object>> index = new HashMap<>();
for (Map<String, Object> record : dest) {
if (record.get(joinFields[0]) != null) {
index.put(record.get(joinFields[0]).toString(), record);
for (Map<String, Object> item : src) {
if (item.get(joinFields[1]) != null) {
index.putIfAbsent(item.get(joinFields[1]).toString(), item);
}
}
for (Map<String, Object> m : src) {
Object srcJoinFieldVal = m.get(joinFields[1]);
for (Map<String, Object> m : dest) {
Object srcJoinFieldVal = m.get(joinFields[0]);
if (srcJoinFieldVal == null || !index.containsKey(srcJoinFieldVal.toString())) {
continue;
}
Map<String, Object> record = index.get(srcJoinFieldVal.toString());
if (fields == null || fields.length == 0) {
record.putAll(m);
m.putAll(record);
} else {
for (String field : fields) {
record.put(field, m.get(field));
m.put(field, record.get(field));
}
}

View File

@@ -187,6 +187,16 @@ class ListFuncTests {
+ " \"itemVal\": 0.7040,\n"
+ " \"itemNm\": \"balance rate\",\n"
+ " \"valueStr\": \"0.7040\",\n"
+ " \"orgCd1\": \"230009999\"\n"
+ " },\n"
+ " {\n"
+ " \"itemType\": \"3\",\n"
+ " \"currCd\": \"156\",\n"
+ " \"batchDate\": \"20190331\",\n"
+ " \"itemCd\": \"ORGAP0008\",\n"
+ " \"itemVal\": 0.7040,\n"
+ " \"itemNm\": \"balance rate\",\n"
+ " \"valueStr\": \"0.7040\",\n"
+ " \"orgCd1\": \"231009999\"\n"
+ " }\n"
+ " ]";