Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(一)

简介: Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(一)

Java对象 转 JSON字符串


JAR包

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>         
</dependency>


USER类

package com.example.demo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
//需要导入lombok
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private int age;
    private String sex;
}


package com.kuang.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.kuang.pojo.User;
import java.util.ArrayList;
import java.util.List;
public class FastJsonDemo {
   public static void main(String[] args) {
       //创建一个对象
       User user1 = new User("秦疆1号", 3, "男");
       User user2 = new User("秦疆2号", 3, "男");
       User user3 = new User("秦疆3号", 3, "男");
       User user4 = new User("秦疆4号", 3, "男");
       List<User> list = new ArrayList<User>();
       list.add(user1);
       list.add(user2);
       list.add(user3);
       list.add(user4);
       System.out.println("*******Java对象 转 JSON字符串*******");
       String str1 = JSON.toJSONString(list);
       System.out.println("JSON.toJSONString(list)==>"+str1);
       String str2 = JSON.toJSONString(user1);
       System.out.println("JSON.toJSONString(user1)==>"+str2);
       System.out.println("\n****** JSON字符串 转 Java对象*******");
       User jp_user1=JSON.parseObject(str2,User.class);
       System.out.println("JSON.parseObject(str2,User.class)==>"+jp_user1);
       System.out.println("\n****** Java对象 转 JSON对象 ******");
       JSONObject jsonObject1 = (JSONObject) JSON.toJSON(user2);
       System.out.println("(JSONObject) JSON.toJSON(user2)==>"+jsonObject1.getString("name"));
       System.out.println("\n****** JSON对象 转 Java对象 ******");
       User to_java_user = JSON.toJavaObject(jsonObject1, User.class);
       System.out.println("JSON.toJavaObject(jsonObject1, User.class)==>"+to_java_user);
  }
}


输出为:

*******Java对象 转 JSON字符串*******
JSON.toJSONString(list)==>[{"age":3,"name":"秦疆1号","sex":"男"},{"age":3,"name":"秦疆2号","sex":"男"},{"age":3,"name":"秦疆3号","sex":"男"},{"age":3,"name":"秦疆4号","sex":"男"}]
JSON.toJSONString(user1)==>{"age":3,"name":"秦疆1号","sex":"男"}
****** JSON字符串 转 Java对象*******
JSON.parseObject(str2,User.class)==>User(name=秦疆1号, age=3, sex=男)
****** Java对象 转 JSON对象 ******
(JSONObject) JSON.toJSON(user2)==>秦疆2号
****** JSON对象 转 Java对象 ******
JSON.toJavaObject(jsonObject1, User.class)==>User(name=秦疆2号, age=3, sex=男)


JAVA对象转MAP


jar

<dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.3</version>
        </dependency>
package com.example.demo.controller.Demo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example.demo.entity.User;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class demoTest3 {
    public static void main(String[] args) throws IllegalAccessException {
        //创建一个对象
        //JAVA中将对象转为Map类型
        User user = new User();
        user.setName("闫文超");
        user.setSex("男");
        user.setAge(16);
          Map map1 = beanToMap(user);
        System.out.println("\n******  Java对象 转Map*******");
        System.out.println("Map" + map1);
        Map<String, Object> map2 = objectToMap2(user);
        System.out.println("\n******  Java对象 转Map*******");
        System.out.println("JSON.parseObject(JSON.toJSONString(obj), Map.class)==>" + map2);
    }
    /**
     * 将java对象转换为Map
     * @param obj
     * @return
     */
    public static Map<String, Object> objectToMap2(Object obj) {
        return JSON.parseObject(JSON.toJSONString(obj), Map.class);
    }
    /**
     * 将java对象转换为Map
     * @param object
     * @return
     * @throws IllegalAccessException
     */
    public static Map beanToMap(Object object) throws IllegalAccessException {
        Map<String, Object> map = new HashMap<String, Object>();
        Field[] fields = object.getClass().getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            map.put(field.getName(), field.get(object));
        }
        return map;
    }
}



Map转java对象


package com.example.demo.controller.Demo;
import com.example.demo.entity.User;
import org.apache.commons.beanutils.BeanUtils;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class demoTest3 {
    public static void main(String[] args) throws IllegalAccessException {
        User user = new User();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("name", "闫文超");
        map.put("sex", "男");
        map.put("age", 16);
        // 将map转换为java对象(bean)
        Object user1 = transMap2Bean(map, user);
        System.out.println("\n****** Map转Java对象******");
        System.out.println("工具demo1"+user1);
        Object user2 = transMapBean(map, user);
        System.out.println("\n****** Map转Java对象******");
        System.out.println("工具demo2"+user2);
    }
    /**
     * 将map转换为java对象(bean)
     *
     * @param map
     * @param obj
     * @return
     */
    public static User transMap2Bean(Map<String, Object> map, Object obj) {
        if (map == null || obj == null) {
            return null;
        }
        try {
            BeanUtils.populate(obj, map);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (User) obj;
    }
    public static User transMapBean(Map<String, Object> map, Object obj) {
        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor property : propertyDescriptors) {
                String key = property.getName();
                if (map.containsKey(key)) {
                    Object value = map.get(key);
                    // 得到property对应的setter方法
                    Method setter = property.getWriteMethod();
                    setter.invoke(obj, value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (User) obj;
    }
}


List转map


package com.example.面向对象1;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class listdemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        Map<String, String> map = list.stream().collect(Collectors.toMap(key -> key, value -> value));
        System.out.println(map);
    }
}



List和Map 的相互转换


package com.example.面向对象1;
import java.util.*;
import java.util.stream.Collectors;
public class listdemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        //java的
        Map<String, String> map1 = list.stream().collect(Collectors.toMap(key -> key, value -> value));
        System.out.println("\n********list对象 转 map*******");
        System.out.println("stream=1=>" + map1);
        List<user> list6 = new ArrayList<>();
        list6.add(new user(1, "a"));
        list6.add(new user(2, "b"));
        list6.add(new user(3, "c"));
// 遍历
        Map<Integer, String> keyValueMap = new HashMap<>();
        for (user keyValue : list6) {
            keyValueMap.put(keyValue.getId(), keyValue.getName());
        }
        keyValueMap.forEach((k, v) -> System.out.println(k + " ==> " + v));
// Java8 Stream
        Map<Integer, String> ma1p1 = list6.stream().collect(Collectors.toMap(user::getId, user::getName));
        System.out.println("\n********list对象 转 map*******");
        System.out.println("stream=2=>" + ma1p1);
        //todo-----------------------------------------------------------------------------------------
        //map转list
        Map<Integer, String> map = new HashMap<>();
        map.put(10, "apple");
        map.put(20, "orange");
        map.put(30, "banana");
        map.put(40, "watermelon");
        map.put(50, "dragonfruit");
        System.out.println("\n******** map转 list 获取key值 *******");
        List<Integer> result = new ArrayList(map.keySet());
        result.forEach(System.out::println);
        System.out.println("\n******** map转 list 获取value值 *******");
        List<String> result2 = new ArrayList(map.values());
        result2.forEach(System.out::println);
        Map map2 = new HashMap();
        map2.put("yan", "xi");
        map2.put("wen", "huan");
        map2.put("chao", "ni");
        List list1 = new ArrayList(map2.keySet());
        List list2 = new ArrayList(map2.values());
        System.out.println("\n******** map转 list 获取key值 *******");
        System.out.println("map转list获取key的值==>"+list1);
        System.out.println("\n******** map转 list 获取value值 *******");
        System.out.println("map转list获取value的值==>"+ list2);
    }
//    public Map<String, List<Student>> groupList(List<Student> students) {
//        Map<String, List<Student>> map = students.stream().collect(Collectors.groupingBy(Student::getName));
//        return map;
//    }
}



相关文章
|
8天前
|
存储 缓存 安全
只会“有序无序”?面试官嫌弃的List、Set、Map回答!
小米,一位热衷于技术分享的程序员,通过与朋友小林的对话,详细解析了Java面试中常见的List、Set、Map三者之间的区别,不仅涵盖了它们的基本特性,还深入探讨了各自的实现原理及应用场景,帮助面试者更好地准备相关问题。
45 20
|
1月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
71 3
|
1月前
|
存储 Java API
Java交换map的key和value值
通过本文介绍的几种方法,可以在Java中实现Map键值对的交换。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。对于简单的键值对交换,可以使用简单遍历法或Java 8的Stream API;对于需要处理值不唯一的情况,可以使用集合存储或Guava的Multimap。希望本文对您理解和实现Java中的Map键值对交换有所帮助。
37 1
|
1月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
62 2
|
1月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
37 2
|
2月前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
33 4
|
2月前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
95 3
|
2月前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
24 1
|
2月前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
40 2
|
2月前
|
存储 缓存 安全
在Java的Map家族中,HashMap和TreeMap各具特色
【10月更文挑战第19天】在Java的Map家族中,HashMap和TreeMap各具特色。HashMap基于哈希表实现,提供O(1)时间复杂度的高效操作,适合性能要求高的场景;TreeMap基于红黑树,提供O(log n)时间复杂度的有序操作,适合需要排序和范围查询的场景。两者在不同需求下各有优势,选择时需根据具体应用场景权衡。
36 2