Convertir un POJO en une carte

Dupliquer possible:
Comment convertir un object Java (bean) en paires clé-valeur (et inversement)?

Quel est le meilleur moyen de convertir une List to a List<Map>. Existe-t-il une méthode / API personnalisée?

K = nom de champ du POJO et V est la valeur correspondante

 public class POJO implements Serializable{ Ssortingng name; Ssortingng age; //getters and setters } 

BeanMap d’Apache Commons fait le travail

Cela ressemble à un travail pour le bon et le vieux Introspector .

Exemple de travail:

 // Don't be lazy like this, do something about the exceptions public static void main(Ssortingng[] args) throws Exception { List pojos = new ArrayList(); POJO p1 = new POJO(); p1.setAge("20"); p1.setName("Name"); pojos.add(p1); POJO p2 = new POJO(); // ... System.out.println(convertCollection(pojos)); } public static List> convertCollection(Collection collection) throws Exception { List> list = new ArrayList>(); for (Object element : collection) { list.add(getValues(element)); } return list; } public static Map getValues(Object o) throws Exception { Map values = new HashMap(); BeanInfo info = Introspector.getBeanInfo(o.getClass()); for (PropertyDescriptor pd : info.getPropertyDescriptors()) { // This will access public properties through getters Method getter = pd.getReadMethod(); if (getter != null) values.put(pd.getName(), getter.invoke(o)); } return values; } 

Vous pouvez utiliser la reflection pour le faire. Voir Class.getDeclaredFields . Cela vous donnera les champs d’une classe, vous pourrez ensuite en obtenir les valeurs et remplir votre carte.

Notez que vous devrez peut-être appeler setAccessible sur les champs si ils sont privés avant de pouvoir obtenir la valeur.

Edit: Ma réponse s’applique uniquement au cas où vous ne connaissez pas les champs / l’implémentation du POJO lors de la création de la carte.

Si vous voulez dire une carte de K, V alors cela fonctionnera

 List pojos = ...; Map map = new HashMap(); for (Pojo pojo : pojos) { map.put(pojo.getName(), pojo.getAge()); } 

En supposant que vous souhaitiez une liste sans Map , le moyen le plus simple consiste probablement à utiliser une simple boucle for:

 Map theMap = new HashMap(); for (POJO obj : theList) { // Obviously the below can be simplified to one line // but it makes sense to make everything explicit for // ease of reading K key = ... // obj.getName() maybe? V value = ... // obj itself maybe? theMap.put(key, value); } 

Vous devez connaître le nom du POJO. En supposant que vous ayez quelque chose comme pojo.getName() , alors ça va comme ceci:

 Map pojoMap = new HashMap(); for (Pojo pojo:pojoList) { pojoMap.put(pojo.getName(), pojo); } 

Notez que j’ai changé votre exigence, j’ai converti une liste de pojos en une carte.