一个list<Map>里map其中的一个字段的值相同,如何判断这个字段相同,就把这个map的其他字段存入另一个map中

如:List<Map>:map1:{ID:4,身高:170,体重:60}
map2:{ID:4,年龄:20,性别:男}
map3:{ID:5,身高:160,体重:50}
map4:{ID:5,年龄:19,性别:女}
每一个map中都都有ID序号。如何根据ID序号判断,得到最终的结果?
最终的结果是List<Map>:map1{ID:4,身高:170,体重:60,年龄:20,性别:男}
map2:{ID:5,身高:160,体重:50,年龄:19,性别:女}

不建议使用Map保存这些,使用实体bean更好

package com.rxlamo.zhidao;

import java.util.*;

public class Main {


    public static void main(String[] args) {

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

        /*
         * map1:{ID:4,身高:170,体重:60}
         map2:{ID:4,年龄:20,性别:男}
         map3:{ID:5,身高:160,体重:50}
         map4:{ID:5,年龄:19,性别:女}
         */

        Map<String, Object> map1 = new HashMap<>();
        map1.put("ID", 4);
        map1.put("身高", 170);
        map1.put("体重", 60);

        list.add(map1);

        Map<String, Object> map2 = new HashMap<>();
        map2.put("ID", 4);
        map2.put("年龄", 20);
        map2.put("性别", '男');

        list.add(map2);


        Map<String, Object> map3 = new HashMap<>();
        map3.put("ID", 5);
        map3.put("身高", 160);
        map3.put("体重", 50);

        list.add(map3);

        Map<String, Object> map4 = new HashMap<>();
        map4.put("ID", 5);
        map4.put("年龄", 19);
        map4.put("性别", '女');

        list.add(map4);

        merge(list);


        for (int i = 0; i < list.size(); i++) {
            Map<String, Object> map = list.get(i);
            System.out.println(map);
        }


    }


    private static void merge(List<Map<String, Object>> list) {

        for (int i = 0; i < list.size(); i++) {

            Map<String, Object> map = list.get(i);


            // 从当前项的下一项开始检查
            for (int j = i + 1; j < list.size(); j++) {

                Map<String, Object> childMap = list.get(j);

                // ID 相等
                if (map.get("ID").equals(childMap.get("ID"))) {
                    // 合并,此处需要先 remove
                    list.remove(childMap);
                    map.putAll(childMap);
                }


            }


        }

    }


}

追问

那我怎么在存入到List当中去啊?因为我是想把map中ID相同的所有map合并成一个map在存入到List当中去

追答

你运行看看就知道了

本来就在list里面,为什么要重新保存一次呢

温馨提示:内容为网友见解,仅供参考
无其他回答

一个list<Map>里map其中的一个字段的值相同,如何判断这个字段相同,就把...
身高:160,体重:50} map4:{ID:5,年龄:19,性别:女} *\/ Map<String, Object> map1 = new HashMap<>(); map1.put("ID", 4); map1.put("身高", 170); map1.put("体重", 60);

js怎么判断一个list里有重复map
js判断一个list里有重复map方法如下:1、先利用ES6语法将数组去重,之后再与原数组比较长度,若长度小于原数组,则说明数组有重复值。2、先将数组转换成字符串,再遍历数组,在字符串中移除当前的数组元素之后还能找到该元素,则说明数组有重复值。3、对数组进行排序,对比上一个元素和下一个元素是否相...

java中list里面存放map,根据map中的某两个个字段进行排序
Map m1=(Map)o1, m2=(Map)o2;\/\/从m1与m2取字段值然后比较,大于返回1,等于返回0,小于返回-1 } public boolean equals(Object o) { \/\/同上面类似 }

Map如果使用重复值
map可以使用重复值的,但是同一个map中不能有相同的键,你可以根据键取值。如果想存相同的键,你可以定义一个ArrayList,再在list中就可以存放多个map啊

快速把List<Map>中的某一项取出并储存到List
首先,假设你有一个List<Map>,这个列表中每个Map都有"name"键。要获取所有"name"键的值,你可以使用Java 8的Stream API:java List nameValues = yourList.stream().map(map -> map.get("name")).collect(Collectors.toList());这段代码中,`stream()`方法将List转换为Stream,`map()`函数...

一个list要把相同的元素的某个值累加起来,怎么办?
常规做法就是遍历list,然后取出studentNo&name进行比对,放在map中,like this:\\x0d\\x0a\\x0d\\x0afor( student in studentList){\\x0d\\x0a if(map.contains(student[(name+studentNo)])){\\x0d\\x0a\\x0d\\x0a map.get(name+studentNo)+student.score\\x0d\\x0a\\x0d\\x0a ...

一个list要把相同的元素的某个值累加起来,怎么办?
name+studentNo)])){ map.get(name+studentNo)+student.score }else{ \/\/ put score into the map with name&studentNo key } } this map object is the final result you want \/\/或者你可以写一个子类继承hashmap,重写put方法,把这个方法包含了你需要的逻辑,然后一个个直接put进去即可 ...

java的List集合里面放了Map,List<Map<String,Object>>,如何判定人名相同...
public class Test2 {public static void main(String[] args) {Map<String, String> map1 = new MyMap<>();map1.put("name", "张三");map1.put("公司", "腾讯");Map<String, String> map2 = new MyMap<>();map2.put("name", "李四");map2.put("公司", "阿里");Map<...

List<Map>如何取对应的值
\/\/ 先取得map Map mm = list.get(0);\/\/ 通过keySet()取得 Iterator<String> iter = mm.keySet().iterator();while(iter.hasNext()) { System.out.println(iter.next());} \/\/ 通过entrySet()取得key值和value值 Iterator<Entry<String, String>> itor = mm.entrySet().iterator();while...

怎么把一个集合里面相同的对象统计出来java
首先应该重写对象的equals方法和hashcode方法吧,用来确定什么样的两个对象才算相同,能放相同对象的集合,应该就是list集合了,然后统计的方法很多了,是要统计相同对象的个数吗?可以使用Map,用对象做键,统计的个数为值,如果键相同,值就加一。这是我脑子中的第一个想法。

相似回答