object对象转换成map_object强转成map

object对象转换成map_object强转成map1、Object转换成map的方法importjava.lang.reflect.Field;importjava.util.HashMap;importjava.util.Map;/***将Object对象里面的属性和值转化成Map对象**@paramobj*@return*@throwsIllegalAccessException*/publicstaticMap<String,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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

1、Object转换成map的方法

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、转换前的数据格式

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、转换后的数据

{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中的值

map.get("content")

5、map转实体对象

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转实体类对象利用的方法

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

/**
     * 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,具体方法如下:

// 格林威治时间转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,所以,根据具体情况灵活变动

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Linux中的压缩解压缩命令

    Linux中的压缩解压缩命令常用压缩格式:.zip,.gz,.bz2,tar.gz,.tar.bz2Linux中常用的软件包都是用红色展示的压缩文件不一定比原文件小,因为压缩文件还包括压缩格式,当原文件比较小时,压缩文

  • linux crontab 每隔10秒执行一次[通俗易懂]

    linux crontab 每隔10秒执行一次[通俗易懂]linux下定时执行任务的方法在LINUX中你应该先输入crontab-e,然后就会有个vi编辑界面,再输入03**1/clearigame2内容到里面:wq保存退出。在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps-ef|grepcron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“…

    2022年10月21日
  • ESP32使用SDIO接口注意事项[通俗易懂]

    ESP32使用SDIO接口注意事项[通俗易懂]最近在使用ESP32的TF卡功能,画原理图的时候发现一个问题IO2引脚上拉的问题。这是我买的的模块,原理图如下:IO2是接地的,如果此引脚接TFF卡时必须接上拉。偶然发现一种接法ESP32中的MTDI引脚,也就是GPIO12,当ESP32上电时,先读GPIO12的电平,拉低时把VDD_SDIO引脚配置为3.3V,供内部Flash使用;拉高时把VDD_SDIO引脚配置为1.8V。因为ESP32S的内部Flash是3.3V供电的,所以需要把GPIO12拉低,但是GPIO12又接了SDIO_D2

  • excel右键不出菜单_哈希校验码下载

    excel右键不出菜单_哈希校验码下载推荐阅读:这套Github上40K+star学习笔记,可以帮你搞定95%以上的Java面试毫不夸张的说,这份SpringBoot学习指南能解决你遇到的98%的问题给跪了!这套万人期待的SQL成神之路PDF,终于开源了最近遇到这么一件事:我在官网下载软件安装包,准备安装的时候被提示说是有病毒,不让安装。当时我就纳闷了,这官网下载的文件怎么会有病毒呢?于是我找到官网标注的文件Hash…

  • 谱图理论(spectral graph theory)

    谱图理论(spectral graph theory)介绍如何理解特征值和特征向量此部分参考了马同学的文章:如何理解矩阵特征值和特征向量?我们知道一个矩阵可以看做是线性变换又或者是某种运动,可以将一个向量进行旋转,平移等等操作,正常来说,对于一个向量vvv,并对其乘上一个A会出现下图的情况:可以看到乘了A之后v发生了一些旋转。然而所有向量中存在一种稳定的向量,他不会发生旋转,平移,只会使得向量变长或变短,而这种稳定的向量正是矩阵的特征向…

  • 你应该知道的,十二大CNN算法

    你应该知道的,十二大CNN算法大家好,我是K同学啊!今天和大家分享一下自年来,涌现出来的那些优秀的图像识别算法模型。⭐️简介模型是YannLeCun教授于1998年在论文《Gradient-basedlearningappliedtodocumentrecognition》中提出。它是第一个成功应用于手写数字识别问题并产生实际商业(邮政行业)价值的卷积神经网络。被誉为是卷积神经网络的“HelloWord”,它是最简单的架构之一。有2个卷积层和3个全连接层,有大约60,000个参数。…………..

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号