Fix list join function n:1 problem #397
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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"
|
||||
+ " ]";
|
||||
|
||||
Reference in New Issue
Block a user