package com.cwq.demo01;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Demo03 {
public static Set<String> set = new HashSet<>();
static {
set.add("String");
set.add("Integer");
set.add("Double");
}
public static void main(String[] args) {
List<String> xxx = new ArrayList<>();
xxx.add("X.D");
xxx.add("X.E");
xxx.add("A.B.C");
xxx.add("amount");
Map<String, Object> map = new HashMap<>();
map.put("amount", "6666");
Map<String, Object> map1 = new HashMap<>();
map1.put("amount", "7777");
map.put("loan", map1);
Map<String, Object> C = new HashMap<>();
C.put("C", "Cc");
Map<String, Object> A = new HashMap<>();
A.put("B", C);
map.put("A", A);
Map<String, Object> D = new HashMap<>();
D.put("D", "DD");
D.put("G", "GG");
Map<String, Object> E = new HashMap<>();
E.put("E", "EE");
E.put("F", "FF");
List<Map<String, Object>> list = new ArrayList<>();
list.add(D);
list.add(E);
map.put("X", list);
System.out.println(map);
for (String str : xxx) {
String[] keys = str.split("\\.");
test(map, Arrays.asList(keys), 0, keys.length-1, (Map<String, Object> content, String key)->{
content.put(key, content.get(key) + "处理了");
System.out.println("------------------key:"+key);
});
}
System.out.println(map);
}
public static void test(Map<String, Object> content, List<String> keys, Integer index, Integer length, FileProc fileProc) {
Object object = content.get(keys.get(index));
if (object == null) {
return;
}
if (set.contains(object.getClass().getSimpleName())) {
if (index == length) {
fileProc.proc(content, keys.get(index));
}
else {
System.out.println("不允许处理------------------false");
}
}
else if (object instanceof List) {
List list = (List)object;
for (Object obj : list) {
if (obj instanceof Map) {
Map<String, Object> map = (Map)obj;
test(map, keys, index+1, length, fileProc);
}
}
}
else if (object instanceof Map) {
Map<String, Object> map = (Map)object;
test(map, keys, index+1, length, fileProc);
}
}
public interface FileProc{
public void proc(Map<String, Object> content, String key);
}
}