ICE.ICE|

韩憨

园龄:4年7个月粉丝:42关注:47

Java反射:将List对象集合转为ListMap集合/MapList集合形式

https://blog.csdn.net/qq_36937684/article/details/116725780

今天使用SpringBoot导入common-beanutils运行的时候总是报NoClassDefFoundError: XXX,所以决定自己写一个类实现 将对象List集合转为以下两种形式:
List<T> --> List<Map<String, Object>>, List<T> --> Map<String, List<Object>>

代码
/**
* 基于反射,将obj转为map
*/
public class BeanUtil {
/**
* Pojo -> Map<String, Object>
* @param obj
* @return
* @throws Exception
*/
public static Map<String,Object> object2Map(Object obj) throws Exception{
Map<String,Object> map = new HashMap<String, Object>();
Field[] fields = obj.getClass().getDeclaredFields();
for(Field field:fields){
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
}
return map;
}

/**
* List<T> --> List<Map<String, Object>>
* @param objectList
* @param <T>
* @return
* @throws Exception
*/
public static <T> List<Map<String, Object>> objectList2ListMap(List<T> objectList) throws Exception {
ArrayList<Map<String, Object>> resultList = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
for (T t : objectList) {
resultList.add(object2Map(t));
}
return resultList;
}

/**
* List<T> --> Map<String, List<Object>>
* @param objectList
* @param keyName
* @param <T>
* @return
* @throws Exception
*/
public static <T> Map<String, List<Object>> objectList2MapList(List<T> objectList, String[] keyName) throws Exception{
Map<String, List<Object>> resultMap = new HashMap<>();
for(int i = 0; i < keyName.length; i++){
List<Object> arrayList = new ArrayList<>();
for (T t: objectList){// List有序,所以对每个对象依次变为map,然后得到对应的值,存入arrayList
arrayList.add(object2Map(t).get(keyName[i]));
}
resultMap.put(keyName[i], arrayList);//将keyName和对应List集合存入resultMap
}
return resultMap;
}
}

测试
测试的时候传入的是List<Statistics>类型,以及对应的pojo:

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Statistics {
private String className;
private Double maxScore;
private Double minScore;
private Double avgScore;
private Integer countStudent;// 学生人数

}

@SpringBootTest(classes = ShizuoApplication.class)
@RunWith(SpringRunner.class)
public class StudentTest {

@Autowired
StudentService studentService;
@Test
public void test() throws Exception {
System.out.println(studentService);
List<Statistics> statistics = studentService.statistics();
List<Map<String, Object>> maps = BeanUtil.objectList2ListMap(statistics);
System.out.println(maps);

Map<String, List<Object>> map = BeanUtil.objectList2MapList(statistics, new String[]{"minScore","maxScore","avgScore","countStudent","className"});
System.out.println(map);

indi.huishi.shizuo.service.impl.StudentServiceImpl@8f0007
[{minScore=76.2, avgScore=83.5333, countStudent=6, className=1, maxScore=88.0}, {minScore=80.0, avgScore=83.3, countStudent=5, className=2, maxScore=86.0}, {minScore=59.0, avgScore=72.84, countStudent=5, className=3, maxScore=85.2}, {minScore=64.0, avgScore=64.0, countStudent=1, className=5, maxScore=64.0}]
{minScore=[76.2, 80.0, 59.0, 64.0], avgScore=[83.5333, 83.3, 72.84, 64.0], countStudent=[6, 5, 5, 1], className=[1, 2, 3, 5], maxScore=[88.0, 86.0, 85.2, 64.0]}

版权声明:本文为CSDN博主「AsajuHuishi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36937684/article/details/116725780

本文作者:韩憨

本文链接:https://www.cnblogs.com/hanby/p/16055000.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   韩憨  阅读(3161)  评论(0编辑  收藏  举报
//看板娘

剑桥

评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示
  1. 1 隔离 (Studio Live Duet) 陈凯咏,林家谦
  2. 2 明知做戏 吴雨霏
  3. 3 残酷游戏 卫兰
  4. 4 你,好不好? 周兴哲
  5. 5 我可以 蔡旻佑
  6. 6 云烟成雨 房东的猫
  7. 7 说散就散 JC 陈咏桐
  8. 8 我配不上你 夏天Alex
  9. 9 不再联系 夏天Alex
  10. 10 等我先说 夏天Alex
  11. 11 我知道他爱你 夏天Alex
  12. 12 多想在平庸的生活拥抱你 隔壁老樊
  13. 13 这一生关于你的风景 隔壁老樊
  14. 14 我曾 隔壁老樊
  15. 15 关于孤独我想说的话 隔壁老樊
  16. 16 过客 周思涵
  17. 17 备爱 周思涵
  18. 18 嚣张 en
  19. 19 海口 后弦
你,好不好? - 周兴哲
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 周兴哲/吴易纬

作曲 : 周兴哲

编曲:陈建骐

是不是 还那么爱迟到

熬夜工作又睡不好

等你完成你的目标

要戒掉逞强的嗜好

都怪我

把自尊放太高

没有把你照顾好

骄傲是脆弱的外表

最怕我的心你不要

能不能继续对我哭

对我笑对我好

继续让我为你想

为你疯陪你老

你好不好好想知道

别急着把回忆都丢掉

我只需要你在身边

陪我吵陪我闹

用好的我

把过去坏的我都换掉

好想听到你坚决说爱我

可惜回不去那一秒

你 好不好

天知道我快要受不了

后悔 钻进心里烧

拥抱 再多一次就好

你要的我都做得到

能不能继续对我哭

对我笑 对我好

继续让我为你想

为你疯 陪你老

给你的好还要不要

答案我却不敢揭晓

我只需要你在身边

陪我吵 陪我闹

别用离开教我

失去的人最重要

别说 你曾经爱过我

让我们回到那一秒

你好不好

能不能继续对我哭

对我笑 对我好

继续让我为你想

为你疯 陪你老

你好不好 我好想知道

别急着把我的爱丢掉

我只需要你在身边

陪我吵 陪我闹

别用离开教我

失去的人最重要

别说 你曾经爱过我

让我们回到那一秒

你 好不好?