将深度嵌套的map对象转换为扁平化的map对象输出。
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* @author 李锋镝
* @date Create at 14:12 2019/7/24
*/
public class MapFlatUtil {
private static final String SEPARATOR = "_";
/**
* 深度嵌套map对象转大map(扁平化)
* @param source 源map
* @param parentNode 父节点扁平化之后的名字
* @return map
*/
public static Map flat(Map source, String parentNode) {
Map flat = new HashMap<>();
Set> set = source.entrySet();
String prefix = StringUtils.isNotBlank(parentNode) ? parentNode + SEPARATOR : "";
set.forEach(entity -> {
Object value = entity.getValue();
String key = entity.getKey();
String newKey = prefix + key;
if (value instanceof Map) {
flat.putAll(flat((Map)value, newKey));
} else {
flat.put(newKey, value);
}
});
return flat;
}
public static void main (String[] args) {
Map map = new HashMap<>();
Map map2 = new HashMap<>();
Map map3 = new HashMap<>();
map.put("root", "root");
map2.put("root", "root");
map2.put("map3", map3);
map3.put("root", "root");
map.put("map2", map2);
System.out.println(flat(map, null));
}
}
输出:
{map2_map3_root=root, map2_root=root, root=root}