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

}

转载于:https://www.cnblogs.com/square198901/archive/2012/02/28/2371781.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值