首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >object对象转换成map_object强转成map

object对象转换成map_object强转成map

作者头像
全栈程序员站长
发布2022-11-16 17:58:23
发布2022-11-16 17:58:23
1.7K0
举报

1、Object转换成map的方法

代码语言:javascript
复制
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;


/**
     * 将Object对象里面的属性和值转化成Map对象
     *
     * @param obj
     * @return
     * @throws IllegalAccessException
     */
    public static Map<String, Object> objectToMap(Object obj) throws IllegalAccessException {
        Map<String, Object> map = new HashMap<String,Object>();
        Class<?> clazz = obj.getClass();
        for (Field field : clazz.getDeclaredFields()) {
            field.setAccessible(true);
            String fieldName = field.getName();
            Object value = field.get(obj);
            map.put(fieldName, value);
        }
        return map;
    }

Jetbrains全家桶1年46,售后保障稳定

2、转换前的数据格式

代码语言:javascript
复制
SearchHit{id='awQWpXgBwGXBeoctg1F5', score=2.1747518, sortValues=[], content=User(id=awQWpXgBwGXBeoctg1F5, name=吴京, msg=我是演员, job=演员, sex=男, age=12, createDate=Tue Apr 06 08:00:00 CST 2021), highlightFields={}}

3、转换后的数据

代码语言:javascript
复制
{score=2.1747518, innerHits={}, highlightFields={}, index=user, id=awQWpXgBwGXBeoctg1F5, nestedMetaData=null, sortValues=[], content=User(id=awQWpXgBwGXBeoctg1F5, name=吴京, msg=我是演员, job=演员, sex=男, age=12, createDate=Tue Apr 06 08:00:00 CST 2021)}

4、取map中的值

代码语言:javascript
复制
map.get("content")

5、map转实体对象

代码语言:javascript
复制
List searchHits = user.getSearchHits();

List<User> users = new ArrayList<>();
        for (Object o : searchHits) {
            Map<String, Object> map = new HashMap<>();
            map = objectToMap(o);
            Map<String, Object> userMap = objectToMap(map.get("content"));
            User user1 = mapToBean(userMap);
            System.out.println("哈哈哈哈哈转换成功:"+user1.getMsg());
            users.add(user1);
        }

6、map转实体类对象利用的方法

参数类型按实际的实体类进行增加

代码语言:javascript
复制
/**
* map 转 实体类
*
* @param map
* @return
* @throws Exception
*/
public User mapToBean(Map<String, Object> map)
throws Exception {
User permission = new User();
if (map != null) {
Field[] declaredFields = User.class.getDeclaredFields();
if (declaredFields != null) {
for (Field declaredField : declaredFields) {
declaredField.setAccessible(true);
Set<String> mapKeys = map.keySet();
for (String mapKey : mapKeys) {
if (declaredField.getType().toString().contains("Integer"))//判断属性类型 进行转换,map中存放的是Object对象需要转换 实体类中有多少类型就加多少类型,实体类属性用包装类;
if (declaredField.getName().equals(mapKey)) {
declaredField.set(permission, Integer.valueOf(map.get(mapKey).toString()));
break;
}
if (declaredField.getType().toString().contains("String"))//判断属性类型 进行转换;
if (declaredField.getName().equals(mapKey)) {
declaredField.set(permission, map.get(mapKey));
break;
}
if (declaredField.getType().toString().contains("Float"))//判断属性类型 进行转换;
if (declaredField.getName().equals(mapKey)) {
declaredField.set(permission, Float.valueOf(map.get(mapKey).toString()));
break;
}
if (declaredField.getType().toString().contains("Long"))//判断属性类型 进行转换;
if (declaredField.getName().equals(mapKey)) {
declaredField.set(permission, Long.valueOf(map.get(mapKey).toString()));
break;
}
if (declaredField.getType().toString().contains("Date"))//判断属性类型 进行转换;
if (declaredField.getName().equals(mapKey)) {
String s = map.get(mapKey).toString();
Date parse = parse(s, "EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
declaredField.set(permission, parse);
break;
}
}
}
}
}
return permission;

7、里面用到的时间格式是格林威治,实体类存的是Date,具体方法如下:

代码语言:javascript
复制
// 格林威治时间转Date
private Date parse(String str, String pattern, Locale locale) {
if (str == null || pattern == null) {
return null;
}
try {
return new SimpleDateFormat(pattern, locale).parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}

8、完整代码在下面,因为我用的是springboot+es,所以,根据具体情况灵活变动

代码语言:javascript
复制
package com.springboot.demo.es;
import com.springboot.demo.entity.User;
import com.springboot.demo.mapper.UserResipotry;
import org.apache.tomcat.util.buf.StringUtils;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.GetQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import javax.xml.crypto.Data;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
/**
* @author dt
* @date 2021年04月06日10:47
*/
@SpringBootTest
public class EsDemo01 {
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
@Test
void test4() throws Exception {
//组合条件对象
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must(QueryBuilders.matchQuery("name", "吴京"));
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
nativeSearchQueryBuilder.withQuery(boolQuery);
SearchHits user = elasticsearchRestTemplate.search(nativeSearchQueryBuilder.build(), User.class, IndexCoordinates.of("user"));
List searchHits = user.getSearchHits();
List<User> users = new ArrayList<>();
for (Object o : searchHits) {
Map<String, Object> map = new HashMap<>();
map = objectToMap(o);
Map<String, Object> userMap = objectToMap(map.get("content"));
User user1 = mapToBean(userMap);
System.out.println("哈哈哈哈哈转换成功:"+user1.getMsg());
users.add(user1);
}
System.out.println(users);
}
/**
* 将Object对象里面的属性和值转化成Map对象
*
* @param obj
* @return
* @throws IllegalAccessException
*/
public static Map<String, Object> objectToMap(Object obj) throws IllegalAccessException {
Map<String, Object> map = new HashMap<String, Object>();
Class<?> clazz = obj.getClass();
for (Field field : clazz.getDeclaredFields()) {
field.setAccessible(true);
String fieldName = field.getName();
Object value = field.get(obj);
map.put(fieldName, value);
}
return map;
}
/**
* map 转 实体类
*
* @param map
* @return
* @throws Exception
*/
public User mapToBean(Map<String, Object> map)
throws Exception {
User permission = new User();
if (map != null) {
Field[] declaredFields = User.class.getDeclaredFields();
if (declaredFields != null) {
for (Field declaredField : declaredFields) {
declaredField.setAccessible(true);
Set<String> mapKeys = map.keySet();
for (String mapKey : mapKeys) {
if (declaredField.getType().toString().contains("Integer"))//判断属性类型 进行转换,map中存放的是Object对象需要转换 实体类中有多少类型就加多少类型,实体类属性用包装类;
if (declaredField.getName().equals(mapKey)) {
declaredField.set(permission, Integer.valueOf(map.get(mapKey).toString()));
break;
}
if (declaredField.getType().toString().contains("String"))//判断属性类型 进行转换;
if (declaredField.getName().equals(mapKey)) {
declaredField.set(permission, map.get(mapKey));
break;
}
if (declaredField.getType().toString().contains("Float"))//判断属性类型 进行转换;
if (declaredField.getName().equals(mapKey)) {
declaredField.set(permission, Float.valueOf(map.get(mapKey).toString()));
break;
}
if (declaredField.getType().toString().contains("Long"))//判断属性类型 进行转换;
if (declaredField.getName().equals(mapKey)) {
declaredField.set(permission, Long.valueOf(map.get(mapKey).toString()));
break;
}
if (declaredField.getType().toString().contains("Date"))//判断属性类型 进行转换;
if (declaredField.getName().equals(mapKey)) {
String s = map.get(mapKey).toString();
Date parse = parse(s, "EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
declaredField.set(permission, parse);
break;
}
}
}
}
}
return permission;
}
@Test
public void getTime() throws ParseException {
String str = "Tue Apr 06 08:00:00 CST 2021";
Date date = parse(str, "EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
}
// 格林威治时间转Date
private Date parse(String str, String pattern, Locale locale) {
if (str == null || pattern == null) {
return null;
}
try {
return new SimpleDateFormat(pattern, locale).parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}

9、那些转换方法都可以单独用

参考文章链接:

https://blog.csdn.net/qq_15204179/article/details/86677123

https://www.cnblogs.com/zktww/p/14296407.html

https://www.cnblogs.com/tobeymarshall/p/10217410.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234450.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年11月2日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Object转换成map的方法
  • 2、转换前的数据格式
  • 3、转换后的数据
  • 4、取map中的值
  • 5、map转实体对象
  • 6、map转实体类对象利用的方法
  • 7、里面用到的时间格式是格林威治,实体类存的是Date,具体方法如下:
  • 8、完整代码在下面,因为我用的是springboot+es,所以,根据具体情况灵活变动
  • 9、那些转换方法都可以单独用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档