Java 使用反射将 List 转换为 Map<String, List<List<Object>>> - 字段名映射到值列表
假设我们有一个List列表,其中的元素是一个实体类对象。我们希望将这个列表转换为一个Map,其中的键是实体类的字段名,值是一个List列表,包含了该字段在每个实体类对象中的取值。\n\n首先,我们需要获取实体类的字段名。可以通过Java反射来实现这一点。下面是一个示例的实体类Entity:\n\njava\npublic class Entity {\n private String field1;\n private int field2;\n \n // 构造函数和getter/setter省略\n}\n\n\n然后,我们可以编写一个方法来将列表转换为Map,具体实现如下:\n\njava\nimport java.lang.reflect.Field;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\npublic class Main {\n public static void main(String[] args) {\n List<Entity> entities = new ArrayList<>();\n entities.add(new Entity('value1', 1));\n entities.add(new Entity('value2', 2));\n \n Map<String, List<List<Object>>> result = convertListToMap(entities);\n System.out.println(result);\n }\n \n public static Map<String, List<List<Object>>> convertListToMap(List<?> list) {\n Map<String, List<List<Object>>> map = new HashMap<>();\n \n if (list.size() > 0) {\n Object firstElement = list.get(0);\n Field[] fields = firstElement.getClass().getDeclaredFields();\n \n for (Field field : fields) {\n field.setAccessible(true);\n List<List<Object>> values = new ArrayList<>();\n \n for (Object element : list) {\n List<Object> fieldValue = new ArrayList<>();\n \n try {\n fieldValue.add(field.get(element));\n } catch (IllegalAccessException e) {\n e.printStackTrace();\n }\n \n values.add(fieldValue);\n }\n \n map.put(field.getName(), values);\n }\n }\n \n return map;\n }\n}\n\n\n上述代码中,我们使用反射获取了实体类的字段数组fields,然后遍历每个字段,为每个字段创建一个List列表values。然后,我们遍历列表中的每个实体类对象,通过反射获取该字段的值,将其添加到values列表中。最后,将字段名及其对应的值列表values放入map中。\n\n运行上述代码,将会得到一个类似于如下的Map:\n\n\n{\n 'field1': [\n ['value1'],\n ['value2']\n ],\n 'field2': [\n [1],\n [2]\n ]\n}\n\n\n其中,'field1'和'field2'是实体类Entity的字段名,对应的值列表分别为['value1', 'value2']和[1, 2]。\n\n请注意,上述示例代码只适用于简单类型的字段,如果字段是一个自定义的类或其他复杂类型,则需要根据具体情况进行修改。
原文地址: https://www.cveoy.top/t/topic/p7G0 著作权归作者所有。请勿转载和采集!