+ " \"item_price_change_log:id:3333\": \"3333\",\n"
+ " \"item_price_change_log:id:4444\": \"4444\",\n"
+ " \"item_price_change_log:item_id:3333\": \"9876666\",\n"
+ " \"item_price_change_log:item_id:4444\": \"9878888\",\n"
+ " \"item_price_change_log:detail:3333\": \"haha3333\",\n"
+ " \"item_price_change_log:detail:4444\": \"haha4444\"\n"
+ "}";
public static void main(String[] args) {
Order order = transferOrder(json);
System.out.println(JSON.toJSONString(order));
}
public static Order transferOrder(String json) {
return relate(underline2camelForMap(group(json)));
}
/**
* 转换成 Map[tablename:id => Map["field": value]]
*/
public static Map<String, Map<String,Object>> group(String json) {
Map<String, Object> map = JSON.parseObject(json);
Map<String, Map<String,Object>> groupedMaps = new HashMap();
map.forEach(
(keyInJson, value) -> {
TableField tableField = TableField.buildFrom(keyInJson);
String key = tableField.getTablename() + ":" + tableField.getId();
Map<String,Object> mapForKey = groupedMaps.getOrDefault(key, new HashMap<>());
mapForKey.put(tableField.getField(), value);
groupedMaps.put(key, mapForKey);
}
);
return groupedMaps;
}
public static Map<String, Map<String,Object>> underline2camelForMap(Map<String, Map<String,Object>> underlined) {
Map<String, Map<String,Object>> groupedMapsCamel = new HashMap<>();
Set<String> ignoreSets = new HashSet();
underlined.forEach(
(key, mapForKey) -> {
Map<String,Object> keytoCamel = TransferUtil.generalMapProcess(mapForKey, TransferUtil::underlineToCamel, ignoreSets);
groupedMapsCamel.put(key, keytoCamel);
}
);
return groupedMapsCamel;
}
/**
* 将分组后的子map先转成相应单个对象,再按照某个key值进行关联
*/
public static Order relate(Map<String, Map<String,Object>> groupedMaps) {
List<Item> items = new ArrayList<>();
List<ItemCore> itemCores = new ArrayList<>();
List<ItemPrice> itemPrices = new ArrayList<>();
List<ItemPriceChangeLog> itemPriceChangeLogs = new ArrayList<>();
groupedMaps.forEach(
(key, mapForKey) -> {
if (key.startsWith("item:")) {
items.add(map2Bean(mapForKey, Item.class));
}
else if (key.startsWith("item_core:")) {
itemCores.add(map2Bean(mapForKey, ItemCore.class));
}
else if (key.startsWith("item_price:")) {
itemPrices.add(map2Bean(mapForKey, ItemPrice.class));
}
else if (key.startsWith("item_price_change_log:")) {
itemPriceChangeLogs.add(map2Bean(mapForKey, ItemPriceChangeLog.class));
}
}
);
Map<String ,List<Item>> itemMap = items.stream().collect(Collectors.groupingBy(
Item::getItemCoreId
));
Map<String ,List<ItemPrice>> itemPriceMap = itemPrices.stream().collect(Collectors.groupingBy(
ItemPrice::getItemId
));
Map<String ,List<ItemPriceCh |