关于两个ListMap组合的问题,大家帮忙看看。

SWQQ- 2011-09-22 11:12:20


//原始数据源
List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();

//要添加的数据源 这个新的数据源是从数据库中查询出来的。暂定执行5次也就是要向data 中添加5次
List<Map<String, Object>> newData = new ArrayList<Map<String, Object>>();

//最终的组合是这样的一个效果 List<Map<String, Object>> data
key ="博士",value="12";
key ="研究生",value="13";
key ="本科",value="3";

newData ==》添加到data 中 如果key相同的话那就value相加,如果在data 中不存在相应的key 则新put一个数据到里面
比如newData

key ="博士",value="3";
key ="研究生",value="3";
key ="本科",value="3";
key ="专科",value="13";
那前三项的key都能在data中找到则value相加,key="专科"在data中找不到则添加这个map到data list 中去。


不知道描述的清晰不。大家帮忙看看,谢谢了。
...全文
412 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
SWQQ- 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 softroad 的回复:]

map.put(key, String.valueOf(Integer.parse(newMap.get(key))));
改为
data.add(newMap);
[/Quote]

之前用另一种方法也实现了合并,但是合并的结果却是相等key value相加的和的2倍。说明执行了双倍的判断。不知道怎么解决。
gukuitian 2011-09-22
  • 打赏
  • 举报
回复
总不能一个map里只有一对 key-value
然后再把把map放到list里
[Quote=引用 12 楼 gukuitian 的回复:]
楼主再想想吧,感觉你这确实用不上list了,
[/Quote]
gukuitian 2011-09-22
  • 打赏
  • 举报
回复
楼主再想想吧,感觉你这确实用不上list了,
softroad 2011-09-22
  • 打赏
  • 举报
回复
map.put(key, String.valueOf(Integer.parse(newMap.get(key))));
改为
data.add(newMap);
SWQQ- 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 softroad 的回复:]

上面代码有问题呢。map的作用域不对,但是取list里面那个map还是new一个map在放入list?
[/Quote]
只要把新key 和其value 添加进data就行
SWQQ- 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zl3450341 的回复:]

1.为什么在外层还要套一个List?

如果只是存储这样的结构:
CSS code

key ="博士",value="12";
key ="研究生",value="13";
key ="本科",value="3";


用Map<String,Object>就足够了,为什么每一条纪录你要新建一个Map?难道说,你的每个Map里面还存放的有其它的数据,不单指key ="博……
[/Quote]

可能还会有其他的类型我这只是做了一个例子。只要有不同的key出现就是用一个map 来添加进list中。
softroad 2011-09-22
  • 打赏
  • 举报
回复
上面代码有问题呢。map的作用域不对,但是取list里面那个map还是new一个map在放入list?
  • 打赏
  • 举报
回复
两个循环
nulls 2011-09-22
  • 打赏
  • 举报
回复
每一个Data应该都是一个对象。
gukuitian 2011-09-22
  • 打赏
  • 举报
回复
既然你要合并map,那么data 和 newData 中的map有对应?

softroad 2011-09-22
  • 打赏
  • 举报
回复

List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
List<Map<String, Object>> newData = new ArrayList<Map<String, Object>>();

for(Map newMap : newData) {
Iterator<String> it = newMap.keySet().iterator();

while(it.hasNext()) {
String key = it.next();
boolean find = false;

for(Map map : data) {
if(map.containsKey(key)) {
find = true;
map.put(key,
String.valueOf(
Integer.parse(map.get(key)) + Integer.parse(newMap.get(key))));
break;
}
}

if(!find) {
map.put(key, String.valueOf(Integer.parse(newMap.get(key))));
}
}
}


大概就是这样,手写的没测。

安心逍遥 2011-09-22
  • 打赏
  • 举报
回复
Map map = (Map)list.get(0);

把 list里面的每一条都转化为一个map

然后从map里面取值就行了


老张-AI 2011-09-22
  • 打赏
  • 举报
回复
1.为什么在外层还要套一个List?

如果只是存储这样的结构:

key ="博士",value="12";
key ="研究生",value="13";
key ="本科",value="3";

用Map<String,Object>就足够了,为什么每一条纪录你要新建一个Map?难道说,你的每个Map里面还存放的有其它的数据,不单指key ="博士",value="12";这样?
softroad 2011-09-22
  • 打赏
  • 举报
回复
清楚了,你是要代码吗?
asdfgcjw 2011-09-22
  • 打赏
  • 举报
回复
mark
SWQQ- 2011-09-22
  • 打赏
  • 举报
回复


List<Map<String, Object>> newData = new ArrayList<Map<String, Object>>();

for(Map newMap : newData) {
boolean find = false;
String lable = newMap.get("LABEL").toString();

for(Map map : data) {
if(map.get("LABEL").equals(lable)) {
find = true;
map.put("VALUE",
String.valueOf(
Integer.parseInt(map.get("VALUE").toString()) + Integer.parseInt(newMap.get("VALUE").toString())));
break;
}
}

if(!find) {
data.add(newMap);
}
}
SWQQ- 2011-09-22
  • 打赏
  • 举报
回复
感谢大家热情帮助。问题已经解决了。
qybao 2011-09-22
  • 打赏
  • 举报
回复
for example
import java.util.*;
public class Test {
public static void main(String []args){
List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
List<Map<String, Object>> newData = new ArrayList<Map<String, Object>>();
//sample original data
Map<String, Object> map = new HashMap<String, Object>();
map.put("博士", "12");
data.add(map);
map = new HashMap<String, Object>();
map.put("研究生", "13");
data.add(map);
map = new HashMap<String, Object>();
map.put("本科", 3);
data.add(map);
//sample new data
map = new HashMap<String, Object>();
map.put("博士", "3");
newData.add(map);
map = new HashMap<String, Object>();
map.put("研究生", "3");
newData.add(map);
map = new HashMap<String, Object>();
map.put("本科", "3");
newData.add(map);
map = new HashMap<String, Object>();
map.put("专科", "13");
newData.add(map);
//merge
List<Map<String, Object>> addData = new ArrayList<Map<String, Object>>();
for (Map<String, Object> m1 : newData) {
for (Map.Entry<String, Object> e1 : m1.entrySet()) {
boolean exist = false;
for (Map<String, Object> m2 : data) {
if (m2.containsKey(e1.getKey())) {
exist = true;
m2.put(e1.getKey(),
Integer.valueOf((String)m2.get(e1.getKey())) +
Integer.valueOf((String)e.getValue()));
break;
}
}
if (! exist) {
map = new Map<String, Object>();
map.put(e1.getKey(), e1.getValue());
addData.add(map);
}
}
}
data.addAll(addData);
}
}

甲壳虫 2011-09-22
  • 打赏
  • 举报
回复

package test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class MapTest {

public static void main(String []args){
Map<String,Integer> data = new HashMap<String,Integer>();
data.put("博士", 12);
data.put("研究生", 13);
data.put("本科", 3);

Map<String,Integer> newData = new HashMap<String,Integer>();
newData.put("博士", 3);
newData.put("研究生", 3);
newData.put("本科", 3);
newData.put("专科", 13);

Iterator<String> it = newData.keySet().iterator();
while(it.hasNext()){
String s = it.next();
Integer val = data.get(s);
if(val==null){
data.put(s, newData.get(s));
}else{
data.put(s, val+newData.get(s));
}
}
Iterator<String> t = data.keySet().iterator();
while(t.hasNext()){
String temp = t.next();
System.out.println(temp+":"+data.get(temp));
}
}
}



测试结果
博士:15
专科:13
本科:6
研究生:16

62,635

社区成员

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

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