java数据中 数据合并工具类

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;
 }

}

posted on 2012-02-28 16:46  square198901  阅读(548)  评论(0)    收藏  举报