现有两个List如下:
①list1中map已经按照date,num排好序。
List<Map<String, String>>  list1
key = "date", value = "20080701" ; key = "num", value = "101" ; key = "money", value = "1000"
key = "date", value = "20080701" ; key = "num", value = "102" ; key = "money", value = "2000"
key = "date", value = "20080702" ; key = "num", value = "101" ; key = "money", value = "3000"②list2中map已经按照num排好序。
List<Map<String, String>>  list2
key = "num", value = "101"
key = "num", value = "102"
key = "num", value = "103"需要生成如下List(list1中的date 与list2中的num 进行组合,如果在list1中不存在该组合,放置到合适的位置)
List<Map<String, String>>  list3
key = "date", value = "20080701" ; key = "num", value = "101"; key = "money", value = "1000"
key = "date", value = "20080701" ; key = "num", value = "102"; key = "money", value = "2000"
key = "date", value = "20080701" ; key = "num", value = "103"; key = "money", value = ""
key = "date", value = "20080702" ; key = "num", value = "101"; key = "money", value = "1000"
key = "date", value = "20080702" ; key = "num", value = "102"; key = "money", value = ""
key = "date", value = "20080702" ; key = "num", value = "103"; key = "money", value = ""
请大家帮个忙。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【smartpoko】截止到2008-07-29 11:48:59的历史汇总数据(不包括此帖):
    发帖的总数量:1                        发帖的总分数:100                      每贴平均分数:100                      
    回帖的总数量:79                       得分贴总数量:45                       回帖的得分率:56%                      
    结贴的总数量:1                        结贴的总分数:100                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    先把两个list的内容放再一起然后toArray然后用
                               new Comparable(){
    public int compareTo(Object o) { return 0;
    }};
    排序
      

  3.   

    List <Map <String, String>>  list3  = new ArrayList();
    list3.addAll(list1);
    list3.addAll(list2);
      

  4.   

    没看明白你的list1,list2怎么组合得到list3的!
      

  5.   

    List <Map <String, String>>  list3
    key = "date", value = "20080701" ; key = "num", value = "101"; key = "money", value = "1000"
    key = "date", value = "20080701" ; key = "num", value = "102"; key = "money", value = "2000"
    key = "date", value = "20080701" ; key = "num", value = "103"; key = "money", value = ""
    key = "date", value = "20080702" ; key = "num", value = "101"; key = "money", value = "3000"
    key = "date", value = "20080702" ; key = "num", value = "102"; key = "money", value = ""
    key = "date", value = "20080702" ; key = "num", value = "103"; key = "money", value = "" 
      

  6.   

    哦, 天... 可怕的设计方法. 如果数据稍大, 如date=100, num=200. 极端情况下在内存将产生20000个对象. 在如果是并发, 估计后台要歇菜.感觉这样的数据不应放在内存中使用这样的方法处理
      

  7.   


    那里就应该是1000,注意value="101"
      

  8.   

    List <Map <String, String>>  list3 
    key = "date", value = "20080701" ; key = "num", value = "101"; key = "money", value = "1000" 
    key = "date", value = "20080701" ; key = "num", value = "102"; key = "money", value = "2000" 
    key = "date", value = "20080701" ; key = "num", value = "103"; key = "money", value = "" 
    key = "date", value = "20080702" ; key = "num", value = "101"; key = "money", value = "3000
    key = "date", value = "20080702" ; key = "num", value = "102"; key = "money", value = "" 
    key = "date", value = "20080702" ; key = "num", value = "103"; key = "money", value = ""不好意思,这个才是正确的,手误 
      

  9.   

    代码:import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeMap;/**
     * ListMapTest - joinListMap
     * @author SageZk
     */
    public class ListMapTest { public static List<Map<String, String>> joinListMap(List<Map<String, String>>a, List<Map<String, String>> b) {
    if (a == null || b == null) return null;
    if (a.isEmpty() || b.isEmpty()) return null;
    List<Map<String, String>> r = new LinkedList<Map<String, String>>();
    Map<String, List<Map<String, String>>> map = new TreeMap<String, List<Map<String, String>>>();
    for (Map<String, String> ma : a) {
    String date = ma.get("date");
    if (!map.containsKey(date)) map.put(date, new LinkedList<Map<String, String>>());
    map.get(date).add(ma);
    }
    Set<String> set = map.keySet();
    for (String d : set) {
    List<Map<String, String>> la = map.get(d);
    for (Map<String, String> mb : b) {
    String numb = mb.get("num");
    boolean flag = true;
    for (Map<String, String> ma : la) {
    String numa = ma.get("num");
    if (numa.equals(numb)) {
    r.add(new HashMap<String, String>(ma));
    flag = false;
    break;
    }
    }
    if (flag) {
    Map<String, String> tm = new HashMap<String, String>(la.get(0));
    tm.put("num", numb);
    tm.put("money", "");
    r.add(tm);
    }
    }
    }
    return r;
    } public static void main(String[] args) {
    Map<String, String> map = null;
    //List 1
    List<Map<String, String>> la = new LinkedList<Map<String, String>>();
    map = new HashMap<String, String>();
    map.put("date", "20080701");
    map.put("num", "101");
    map.put("money", "1000");
    la.add(map);
    map = new HashMap<String, String>();
    map.put("date", "20080701");
    map.put("num", "102");
    map.put("money", "2000");
    la.add(map);
    map = new HashMap<String, String>();
    map.put("date", "20080702");
    map.put("num", "101");
    map.put("money", "3000");
    la.add(map);
    //List 2
    List<Map<String, String>> lb = new LinkedList<Map<String, String>>();
    map = new HashMap<String, String>();
    map.put("num", "101");
    lb.add(map);
    map = new HashMap<String, String>();
    map.put("num", "102");
    lb.add(map);
    map = new HashMap<String, String>();
    map.put("num", "103");
    lb.add(map);
    //List Result
    List<Map<String, String>> r = joinListMap(la, lb);
    if (r != null) {
    System.out.println(r.size());
    for (Map<String, String> m : r) {
    String s = "";
    s += "date:";
    s += m.get("date");
    s += " ; num:";
    s += m.get("num");
    s += " ; money:";
    s += m.get("money");
    System.out.println(s);
    }
    } else {
    System.out.println("Result List is null");
    }
    }}输出:6
    date:20080701 ; num:101 ; money:1000
    date:20080701 ; num:102 ; money:2000
    date:20080701 ; num:103 ; money:
    date:20080702 ; num:101 ; money:3000
    date:20080702 ; num:102 ; money:
    date:20080702 ; num:103 ; money:
      

  10.   

    谢谢各位,谢谢sagezk,问题解决!