转换a的最佳方法是什么? List<POJO> to a List<Map<K,V>>.
有自定义方法/ API吗?
K = POJO的字段名称,V是对应的值
public class POJO implements Serializable{
String name;
String age;
//getters and setters
}
转换a的最佳方法是什么? List<POJO> to a List<Map<K,V>>.
有自定义方法/ API吗?
K = POJO的字段名称,V是对应的值
public class POJO implements Serializable{
String name;
String age;
//getters and setters
}
BeanMap 来自Apache Commons的工作
对于好人和老人来说,这听起来像是一份工作 内部检查。
工作范例:
// Don't be lazy like this, do something about the exceptions
public static void main(String[] args) throws Exception {
List<POJO> pojos = new ArrayList<POJO>();
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<Map<String, ?>> convertCollection(Collection collection)
throws Exception {
List<Map<String, ?>> list = new ArrayList<Map<String, ?>>();
for (Object element : collection) {
list.add(getValues(element));
}
return list;
}
public static Map<String, ?> getValues(Object o)
throws Exception {
Map<String, Object> values = new HashMap<String, Object>();
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;
}
你可以使用反射来做到这一点。看到 Class.getDeclaredFields。这将为您提供类的字段,然后您可以从中获取值并填充您的地图。
请注意,您可能需要调用 setAccessible 在字段上如果是私有的,则可以获得该值。
编辑:我的回答仅适用于您在构建地图时不知道POJO的字段/实现的情况。
如果你的意思是K,V的地图,那么这将有效
List<Pojo> pojos = ...;
Map<String, String> map = new HashMap<String,String>();
for (Pojo pojo : pojos) {
map.put(pojo.getName(), pojo.getAge());
}
假设你想要一个 Map
没有列表,最简单的方法可能是使用简单的for循环:
Map<K,V> theMap = new HashMap<K,V>();
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);
}
您需要知道POJO名称。假设你有类似的东西 pojo.getName()
,那就是这样的:
Map<String, Pojo> pojoMap = new HashMap<String, Pojo>();
for (Pojo pojo:pojoList) {
pojoMap.put(pojo.getName(), pojo);
}
注意 我已经改变了你的要求 转换 一张地图的pojos列表。