public class VerticalMerger {
public static List<Map<String, Object>> transform(
LinkedList<String> keyList, List<Map<String, Object>> mapList) {
List<Map<String, Object>> newMapList = new LinkedList<Map<String, Object>>();
Map<String, Object> newMap = null;
List<Map<String, Object>> keyMapList = null;
Map<String, Object> keyMap = null;
// 判断是否有需要合并的列
if (!keyList.isEmpty()) {
String key = keyList.getFirst();
Object value = null;
for (Map<String, Object> map : mapList) {
Object _value = map.get(key);
// 遇到合并列出现不同的值时,建立新的下级列表
if (null == _value || "".equals(_value)
|| !_value.equals(value)) {
keyMapList = new LinkedList<Map<String, Object>>();
newMap = new HashMap<String, Object>();
newMap.put(key, value = _value);
newMap.put("children", keyMapList);
newMapList.add(newMap);
}
keyMap = new HashMap<String, Object>();
for (Map.Entry<String, Object> entry : map.entrySet()) {
if (!key.equals(entry.getKey())) {
keyMap.put(entry.getKey(), entry.getValue());
}
}
keyMapList.add(keyMap);
}
for (Map<String, Object> map : newMapList) {
keyMapList = (List<Map<String, Object>>) map.get("children");
if (keyList.size() > 1) {
keyMapList = transform(new LinkedList<String>(keyList
.subList(1, keyList.size())), keyMapList);
}
map.put("children", keyMapList);
Integer length = 0;
for (Map<String, Object> _keyMap : keyMapList) {
if (_keyMap.containsKey("length")) {
length += (Integer) _keyMap.get("length");
} else {
length = keyMapList.size();
}
}
map.put("length", length);
}
return newMapList;
}
return mapList;
}
}