java 分组 有序集合 LinkedHashMap Object 转 ArrayList 遍历

项目中运用到分组排序,以某规则进行分组,并按照顺序显示在表格中,此处用到 LinkedHashMap这个有序HashMap,以下为实现方法

        List<String> list=new ArrayList<>();
        list.add("A:aa");
        list.add("A:ab");
        list.add("A:ac");
        list.add("B:ad");
        list.add("B:aee");
        list.add("B:aa");
        list.add("C:aa");
        list.add("D:aa");
        list.add("D:aa");
        if (CollectionUtils.isNotEmpty(list)) {
            LinkedHashMap<String,List<Map<String,String>>> itemsList= new LinkedHashMap<>();//集合顺序与添加顺序一致
            List<Map<String,String>> titles=new ArrayList<>();
            for (String mm:list) {
                String[] itemName=mm.split(":");
                Map<String, String> map=new HashMap<>();
                map.put(itemName[1],"1");//"1"是会变化的值,此处为测试,简化了
                if(itemsList.containsKey(itemName[0])){
                    itemsList.get(itemName[0]).add(map);
                }else{
                    titles=new ArrayList<>();
                    titles.add(map);
                }
                itemsList.put(itemName[0],titles);
            }
            logger.info(itemsList.toString());
            Iterator<Map.Entry<String,List<Map<String,String>>>> iterator= itemsList.entrySet().iterator();//迭代器遍历LinkedHashMap
            while(iterator.hasNext())
            {
                Map.Entry entry = iterator.next();
                logger.info(entry.getKey()+":"+entry.getValue());
                List<Map<String,String>> listMap=(ArrayList<Map<String,String>>)entry.getValue();//object 转 ArrayList
                for(int m=0;m<listMap.size();m++){//遍历list
                    Map<String,String> map=listMap.get(m);
                    for(String key:map.keySet()){//遍历 map
                        logger.info(key+" --"+map.get(key));
                    }
                }
            }
        }

打印结果如下:

 

 

### 回答1: 可以使用 Java 的反射机制来将 LinkedHashMap 换为对象。 首先,需要创建一个类,该类的成员变量与 LinkedHashMap 中的键值对对应。然后,可以使用 LinkedHashMap 的 entrySet() 方法获取所有的键值对,并使用反射来将这些键值对设置到新创建的对象的成员变量中。 具体实现可以参考以下代码示例: ``` public static <T> T mapToObject(Map<String, Object> map, Class<T> clazz) throws Exception { T obj = clazz.newInstance(); for (Map.Entry<String, Object> entry : map.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); Field field = clazz.getDeclaredField(key); field.setAccessible(true); field.set(obj, value); } return obj; } ``` 在上面的代码中,T 是需要换的目标对象的类型,mapLinkedHashMap 对象,clazz 是目标对象的 Class 对象。 使用方法如下: ``` LinkedHashMap<String, Object> map = new LinkedHashMap<>(); map.put("name", "John"); map.put("age", 30); try { Person person = mapToObject(map, Person.class); System.out.println(person.getName()); // "John" System.out.println(person.getAge()); // 30 } catch (Exception e) { e.printStackTrace(); } ``` 在这个示例中,Person 类应该具有名为 name 和 age 的成员变量。 ### 回答2: 使用JavaLinkedHashMap类可以方便地将其换为对象。 LinkedHashMapJava中的一种有序Map集合,它与HashMap相比具有保持元素插入顺序的特点。要将LinkedHashMap换为对象,可以按照以下步骤进行操作: 1. 创建一个Java类,表示要换为的对象。该类需要包含与LinkedHashMap中的键值对对应的字段。 2. 在目标对象类中,为每个字段添加相应的访问器和修改器方法(getters和setters)。 3. 在目标对象类中,创建一个构造方法,用于初始化各个字段的值。 4. 使用LinkedHashMap的entrySet()方法获取其键值对集合。 5. 遍历键值对集合,通过getKey()方法获取键,通过getValue()方法获取值。 6. 使用获取的键和值,调用目标对象的setter方法为字段设置值。 7. 遍历完所有的键值对后,即可获得将LinkedHashMap换为的对象。 以下是一个简单的示例代码: ```java import java.util.*; public class Main { public static void main(String[] args) { LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>(); linkedHashMap.put("name", "John"); linkedHashMap.put("age", 25); Person person = convertToObject(linkedHashMap); System.out.println(person.getName()); // 输出:John System.out.println(person.getAge()); // 输出:25 } public static Person convertToObject(LinkedHashMap<String, Integer> linkedHashMap) { Person person = new Person(); for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) { String key = entry.getKey(); Integer value = entry.getValue(); switch (key) { case "name": person.setName((String)value); break; case "age": person.setAge((Integer)value); break; } } return person; } } class Person { private String name; private Integer age; public Person() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } ``` 在上述示例中,我们将一个包含"name"和"age"字段的LinkedHashMap换为了一个Person对象。在convertToObject()方法中,我们遍历LinkedHashMap的键值对集合,根据不同的键调用Person对象的setter方法为其字段设置值。 需要注意的是,上述示例中只处理了两个字段的换,如果LinkedHashMap中包含更多的字段,需要将对应的setter方法添加到Person类中,并在convertToObject()方法中进行处理。 ### 回答3: JavaLinkedHashMap是一种有序的HashMap,可以按照元素的插入顺序遍历。要将LinkedHashMap换为对象,首先需要定义一个对应的Java类,该类的属性与LinkedHashMap的键值对一一对应。然后,可以通过遍历LinkedHashMap的键值对,将每个键值对的键和值分别赋值给Java类的相应属性。 具体步骤如下: 1. 定义Java类,该类对应LinkedHashMap的键值对: ```java public class MyClass { private String key; private Object value; // 省略构造方法和getter、setter方法 } ``` 2. 创建LinkedHashMap,并添加键值对: ```java LinkedHashMap<String, Object> linkedHashMap = new LinkedHashMap<>(); linkedHashMap.put("key1", value1); linkedHashMap.put("key2", value2); // ... ``` 3. 创建一个List对象,用于存储换后的对象: ```java List<MyClass> myClassList = new ArrayList<>(); ``` 4. 遍历LinkedHashMap的键值对,并将键和值分别赋值给Java类的属性,然后将Java类对象添加到List中: ```java for (Map.Entry<String, Object> entry : linkedHashMap.entrySet()) { MyClass myClass = new MyClass(); myClass.setKey(entry.getKey()); myClass.setValue(entry.getValue()); myClassList.add(myClass); } ``` 5. 最后,可以根据需要对List中的对象进行进一步操作或传递给其他方法使用。 这样,我们就可以将JavaLinkedHashMap换为对象,以便于后续的处理和使用。注意,需要根据实际情况修改Java类的属性和方法,并根据具体需求进行适当的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值