List集合合并

YourSmallStar 2017-10-31 11:27:28
举个例子吧
int count = 5;//这个值不是死的可以改动
List<Map> list1 = new ArrayList<Map>();
List<Map> list2 = new ArrayList<Map>();
Map<String,Object> map1 = null;
Map<String,Object> map2 = new HashMap<String,Object>();
for(inr i = 0;i<count;i++){
map1 = new HashMap<String,Object>();
map1.put("time",i);
map1.put("data","list"+i);//这个数据就是需要合并的数据,请忽略值
}
list1.add(map1);
for(inr i = 0;i<count;i++){
map2 = new HashMap<String,Object>();
map2.put("time",i);
map2.put("data","list"+i);//这个数据就是需要合并的数据,请忽略值
}
list2.add(map2);


就是这种的数据不是就两个,是很八个十个十五个 怎么合并 请大神指点一二
谢谢各位
...全文
549 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
s478853630 2020-01-08
  • 打赏
  • 举报
回复
正好遇到这样的需求,不过已经解决了,思路如下:
List<List<Map<String, Object>>> values;// 传入的参数,里面包含多个List,每个List又有多个Map,现在要做合并
第一步,取出每个List的size,做冒泡排序,找出size最多的List,就是返回值的size
第二步,new 出一下新的List做返回值
第三步,循环返回值List的size
第四步,result就是已经合并好的数据,下面是代码:

@Test
public void test() throws Exception {
Map<String, Object> map1_1 = EntityUtil.create(Map.class, new String[] { "id", "name" }, new Object[] { "1", "zhang" });
Map<String, Object> map1_2 = EntityUtil.create(Map.class, new String[] { "id", "name" }, new Object[] { "2", "li" });
List<Map<String, Object>> list1 = new ArrayList<Map<String, Object>>();
list1.add(map1_1);
list1.add(map1_2);
Map<String, Object> map2_1 = EntityUtil.create(Map.class, new String[] { "age" }, new Object[] { "10" });
List<Map<String, Object>> list2 = new ArrayList<Map<String, Object>>();
list2.add(map2_1);
List<List<Map<String, Object>>> values = new ArrayList<List<Map<String, Object>>>();
values.add(list1);
values.add(list2);

List<Map<String, Object>> result = merge(values);
System.out.println(EntityUtil.toJson(result));
}

/**
* 数据合并
*
* @param values 多份数据
* @return List
*/
public static List<Map<String, Object>> merge(List<List<Map<String, Object>>> values) {
BigDecimal[] sizes = new BigDecimal[values.size()];
for (int i = 0; i < values.size(); i++) {
sizes[i] = BigDecimal.valueOf(values.get(i).size());
}
bubbleSort(sizes, true);
List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
for (int i = 0; i < sizes[0].intValue(); i++) {
Map<String, Object> map = new HashMap<String, Object>();
for (List<Map<String, Object>> value : values) {
if (value.size() > i) {
map.putAll(value.get(i));
}
}
result.add(map);
}
return result;
}

/**
* 冒泡排序
*
* @param array 数组
* @param isDesc 是否降序
*/
public static void bubbleSort(BigDecimal[] array, boolean isDesc) {
array = (null == array ? new BigDecimal[] {} : array);
BigDecimal number = BigDecimal.ZERO;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
if (!isDesc) {
if (array[i].doubleValue() < array[j].doubleValue()) {
number = array[i];
array[i] = array[j];
array[j] = number;
}
}
if (isDesc) {
if (array[i].doubleValue() > array[j].doubleValue()) {
number = array[i];
array[i] = array[j];
array[j] = number;
}
}
}
}
}

运行结果如下:

[{"name":"zhang","age":"10","id":"1"},{"name":"li","id":"2"}]
javafor点com 2017-11-02
  • 打赏
  • 举报
回复
楼主你好像没表达明白
自由自在_Yu 2017-11-01
  • 打赏
  • 举报
回复
for(inr i = 0;i<count;i++){} 这是int吧? 说的不清楚,是要合并list里面的map还是要合并map里面的data?合并之后要什么样的形式? 你举个明显的例子,说明合并后是什么样的
  • 打赏
  • 举报
回复
for(inr i = 0;i<count;i++){ map1 = new HashMap<String,Object>(); map1.put("time",i); map1.put("data","list"+i); list1.add(map1); } for(inr i = 0;i<count;i++){ map2 = new HashMap<String,Object>(); map2.put("time",i); map2.put("data","list"+i); list2.add(map2); }
qq_27370947 2017-10-31
  • 打赏
  • 举报
回复
每循环一次,你map1,map2都指向了一个新的对象,你list add又是写到循环外面的,所以你list1.add(map1)的时候就只添加进去了最后一个对象的指引

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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