有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将对象arraylist转换为hashmap,其中键和值是对象属性

我有一个对象数组列表,如下所示

List<Model> list= new ArrayList<Model>();

模型对象有两个属性,它们都是整数

  1. 身份证
  2. 计数

现在,我想将此arraylist转换为哈希映射,其中id是键,count是值:

Map<Integer,Integer> convertedmap=new  HashMap<Integer,Integer>();

谢谢你的帮助


共 (3) 个答案

  1. # 1 楼答案

    对列表进行迭代,并在映射中为每个迭代的模型对象添加新元素:

    Map<Integer,Integer> convertedmap = new  HashMap<Integer,Integer>();
    for (Model model : list){
       convertedmap.put(model.getId(), model.getCount());
    }
    

    注意:如果listModel个实例的as id字段值相同,则列表中具有相同id的最后一个实例将覆盖已创建映射中的前一个实例

    你可以检查一下

    否则,您也可以使用Java 8的Collectors.toMap()方法执行该作业:

    Map<Integer, Integer> convertedmap = list.stream().collect(
                    Collectors.toMap(Model::getId, Model::getCount));
    

    它比经典的循环迭代有优势
    如果在映射中用作键的id值在list中有重复的值,它将上升IllegalStateException : Duplicate key...,而不是默默地覆盖映射

  2. # 2 楼答案

    您可以使用for循环执行此操作

    List<Model> list= new ArrayList<Model>();
    Map<Integer,Integer> convertedmap=new  HashMap<Integer,Integer>();
    
    for(int i=0;i<list.size();i++){
    Model model = list.get(i);
    
    convertedmap.put(model.getId(),model.getCount());
    }
    
  3. # 3 楼答案

    首先,用适当的setter/getter完成POJO类Model,然后 您可以迭代整个ArrayListlist,并将值放入Mapconvertedmap中,如下所示:

    Map<Integer,Integer> convertedmap=new  HashMap<Integer,Integer>();
    
    for (Model md : list) {
       convertedmap.put(md.getId(), md.getCount());
    }