关于两个List组合成为一个新List的问题!

smartpoko 2008-07-29 11:48:51
现有两个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 = ""


请大家帮个忙。
...全文
883 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
smartpoko 2008-08-01
  • 打赏
  • 举报
回复
谢谢各位,谢谢sagezk,问题解决!
sagezk 2008-07-29
  • 打赏
  • 举报
回复
代码一大堆尖括号,有点乱,楼主理清思路慢慢看。
sagezk 2008-07-29
  • 打赏
  • 举报
回复
代码:

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:
  • 打赏
  • 举报
回复
想试验下都不好弄
smartpoko 2008-07-29
  • 打赏
  • 举报
回复
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 = ""

不好意思,这个才是正确的,手误
smartpoko 2008-07-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sagezk 的回复:]
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", va…
[/Quote]

不好意思,这个才是正确的,手误
haode 2008-07-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sagezk 的回复:]
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 = ""
[/Quote]

那里就应该是1000,注意value="101"
胡矣 2008-07-29
  • 打赏
  • 举报
回复
?
nieliqiang84 2008-07-29
  • 打赏
  • 举报
回复
数据好乱
吐司vivi 2008-07-29
  • 打赏
  • 举报
回复
没明白!!!
imasmallbird 2008-07-29
  • 打赏
  • 举报
回复
笛卡尔积??
wangfei8573 2008-07-29
  • 打赏
  • 举报
回复
能否先定义个插入函数,然后利用循环插入!
TinyJimmy 2008-07-29
  • 打赏
  • 举报
回复
哦, 天... 可怕的设计方法.

如果数据稍大, 如date=100, num=200. 极端情况下在内存将产生20000个对象. 在如果是并发, 估计后台要歇菜.

感觉这样的数据不应放在内存中使用这样的方法处理
ldy214 2008-07-29
  • 打赏
  • 举报
回复
sagezk 2008-07-29
  • 打赏
  • 举报
回复
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 = ""
sagezk 2008-07-29
  • 打赏
  • 举报
回复
你给的结果对吗?
aipb2008 2008-07-29
  • 打赏
  • 举报
回复
没看明白你的list1,list2怎么组合得到list3的!
Rhea.H 2008-07-29
  • 打赏
  • 举报
回复
List <Map <String, String>> list3 = new ArrayList();
list3.addAll(list1);
list3.addAll(list2);
wzh0439 2008-07-29
  • 打赏
  • 举报
回复
先把两个list的内容放再一起然后toArray然后用
new Comparable(){
public int compareTo(Object o) {

return 0;
}};
排序

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧