import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
* Map 与 实体类转换工具类
* by CHENYB date 2019-05-29
* @version 1.0
public class MapUtil {
protected static Log log = LogFactory.getLog(MapUtil.class);
* 利用反射将map集合封装成bean对象
* by CHENYB date 2019-05-29
* @param map
* @param clazz
* @param
* @return
* @throws Exception
public static T mapToBean(Map map, Class> clazz) throws Exception {
Object obj = clazz.newInstance();
if (map != null && !map.isEmpty() && map.size() > 0) {
for (Entry entry : map.entrySet()) {
String propertyName = entry.getKey(); // 属性名
Object value = entry.getValue(); // 属性值
if (null == value||StringUtils.isBlank( String.valueOf( value )))
continue;
String setMethodName = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
Field field = getClassField(clazz, propertyName); //获取和map的key匹配的属性名称
if (field == null){
continue;
Class> fieldTypeClass = field.getType();
value = convertValType(value, fieldTypeClass);
try {
if (StringUtils.isNotBlank( setMethodName )&& setMethodName.toUpperCase().contains( "SERIALVERSIONUID" ))
continue;
clazz.getMethod(setMethodName, field.getType()).invoke(obj, value);
} catch (NoSuchMethodException e) {
e.printStackTrace();
return (T) obj;
* 根据给定对象类匹配对象中的特定字段
* @param clazz
* @param fieldName
* @return
private static Field getClassField(Class> clazz, String fieldName) {
if (Object.class.getName().equals(clazz.getName())) {
return null;
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field : declaredFields) {
if (field.getName().equals(fieldName)) {
return field;
Class> superClass = clazz.getSuperclass(); //如果该类还有父类,将父类对象中的字段也取出
if (superClass != null) { //递归获取
return getClassField(superClass, fieldName);
return null;
* 将map的value值转为实体类中字段类型匹配的方法
* @param value
* @param fieldTypeClass
* @return
private static Object convertValType(Object value, Class> fieldTypeClass) {
Object retVal = null;
if (Long.class.getName().equals(fieldTypeClass.getName())
|| long.class.getName().equals(fieldTypeClass.getName())) {
retVal = Long.parseLong(value.toString());
} else if (Integer.class.getName().equals(fieldTypeClass.getName())
|| int.class.getName().equals(fieldTypeClass.getName())) {
retVal = Integer.parseInt(value.toString());
} else if (Float.class.getName().equals(fieldTypeClass.getName())
|| float.class.getName().equals(fieldTypeClass.getName())) {
retVal = Float.parseFloat(value.toString());
} else if (Double.class.getName().equals(fieldTypeClass.getName())
|| double.class.getName().equals(fieldTypeClass.getName())) {
retVal = Double.parseDouble(value.toString());
} else {
retVal = value;
return retVal;
* 利用反射将map集合封装成bean对象
* by CHENYB date 2019-05-29
* 对象转map
* @param obj
* @return
public static Map objToMap(Object obj) {
Map map = new HashMap();
Field[] fields = obj.getClass().getDeclaredFields(); // 获取f对象对应类中的所有属性域
for (int i = 0, len = fields.length; i < len; i++) {
String varName = fields[i].getName();
//varName = varName.toLowerCase(); // 将key置为小写,默认为对象的属性
try {
boolean accessFlag = fields[i].isAccessible(); // 获取原来的访问控制权限
fields[i].setAccessible(true); // 修改访问控制权限
Object o = fields[i].get(obj); // 获取在对象f中属性fields[i]对应的对象中的变量
if (o != null){
map.put(varName, o.toString());
fields[i].setAccessible(accessFlag); // 恢复访问控制权限
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
return map;
* map Value String 转 Objcet
* @param map
* @return
public static HashMap mapStringToHashMapObj(Map map){
HashMap resultMap = new HashMap<>();
for (Entry entry : map.entrySet()) {
resultMap.put( entry.getKey(),entry.getValue());
return resultMap;
* map Value Objcet 转 String
* @param map
* @return
public static HashMap mapObjToHashMapStr(Map map){
HashMap resultMap = new HashMap<>();
for (Entry entry : map.entrySet()) {
resultMap.put( entry.getKey(),entry.getValue().toString());
return resultMap;
* @param clazz
* @return
* @author created by figo
public static Map getDeclaredFieldsMap(Class> clazz) {
Map filesMap = new HashMap<>();
if (clazz != null) {
Field[] fields = clazz.getDeclaredFields();
for (Field f : fields) {
filesMap.put(f.getName(), f);
return filesMap;
* @param paramMap
* @param obj
* @author created by figo
public static void bindingPropertyValue(Map paramMap, Object obj) {
if (MapUtils.isEmpty(paramMap) || obj == null) {
return;
Map fieldsMap = getDeclaredFieldsMap(obj.getClass());
for (Entry entry : paramMap.entrySet()) {
if (fieldsMap.containsKey(entry.getKey())) {
Field field = fieldsMap.get(entry.getKey());
Object value = entry.getValue();
if (field.getType().getName().equals("java.lang.Integer")) {
value = NumberUtils.toInt(entry.getValue());
} else if (field.getType().getName().equals("java.lang.Long")) {
value = NumberUtils.toLong(entry.getValue());
} else if (field.getType().getName().equals("java.util.Date")) {
value = DateStringCalcUtils.stringToDateByGeneralYMDHMS(entry.getValue());
try {
PropertyUtils.setProperty(obj, entry.getKey(), value);
} catch (Exception e) {
e.printStackTrace();
log.error("bindingPropertyValue error! msg is:" + LogUtils.getErrorMsg(e));
public static void bindingPropertyValueFromObject(Map paramMap, Object obj) {
if (MapUtils.isEmpty(paramMap) || obj == null) {
return;
Map fieldsMap = getDeclaredFieldsMap(obj.getClass());
for (Entry entry : paramMap.entrySet()) {
if (fieldsMap.containsKey(entry.getKey())) {
Field field = fieldsMap.get(entry.getKey());
Object value = entry.getValue();
if (field.getType().getName().equals("java.lang.Integer")) {
value = NumberUtils.toInt(entry.getValue().toString());
} else if (field.getType().getName().equals("java.lang.Long")) {
value = NumberUtils.toLong(entry.getValue().toString());
} else if (field.getType().getName().equals("java.util.Date")) {
value = DateStringCalcUtils.stringToDateByGeneralYMDHMS(entry.getValue().toString());
try {
PropertyUtils.setProperty(obj, entry.getKey(), value);
} catch (Exception e) {
log.error("bindingPropertyValue error! msg is:" + LogUtils.getErrorMsg(e));
package com.utils;import org.apache.commons.beanutils.PropertyUtils;import org.apache.commons.collections4.MapUtils;import org.apache.commons.lang3.math.NumberUtils;import org.apache.commons.lo...
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.eco.base.
util
.String
Util
;
import com.fasterxml.jackson.databind.Object
Map
per;
import java.beans.BeanInfo;
import java.beans.In.
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.
ap
ache.commons.bean
utils
.Bean
Utils
;
import org.
ap
ache.commons.lang3.String
Utils
;
import java.
util
.Hash
Map
;
import...
目录参考文献代码和权重下载准备工作data中新建几个文件夹makeTxt.pyvoc_label.py文件修改数据集方面的yaml文件修改网络参数方面的yaml文件修改train.py中的一些参数修改训练测试新建data_test新建几个py文件cfg_
mAP
.py:detect_eval_class_txt.py :compute_
mAP
.py:
mAP
_line.py :
utils
_
mAP
.py:yolov5_eval.py :
本人前段时间用yolov5进行目标检测研究,记录一下流程方便查看,也希望能帮
import com.alibaba.fastjson.JSONObject;
// 假设list有值
List<
Map
<String,Object>> list = new ArrayList<>();
// Student对象为测试对象
// 按照如下方式可以实现List&
private static
Map
<String, Object> objTo
Map
(Object obj) {
Map
<String, Object>
map
= new Hash
Map
<String, Object>();
Field[] fields = obj.getClass().getDeclare.
注 : 2019-06-16日 增加第六节
map
与实体互转
工具类
,直接看第6节;
1.调用这个方法Bean
Map
Utils
.
map
ToBean(),实现
map
集合转
实体类
对象;
注意:这个方法
转换
时我这边老是报类型
转换
错误,引用这段代码没有报错的小伙伴可继续使用,此方法扩展性好,报错的小伙伴请看最下面的一个
map
转
实体类
对象方法;
//1.通过
map
构造permiss...
package com.kq.cloud.common.
util
;
import org.
ap
ache.commons.collections.
map
.Linked
Map
;
import java.beans.BeanIn...
Java报错笔记-org.springframework.data.redis.serializer.SerializationException: Could not read JSON
17696