Java 数据类型转换、方法调用相关笔记

这篇博客详细介绍了Java中Json字符串转Map,Map转对象的方法,包括依赖fast-json库。讲解了Map的多种初始化方式,如Java8的双括号初始化和Java9的新特性。还涉及到了Java数组转Set的流式操作,使用Collections.addAll()和Arrays.asList()方法的转换。此外,文章还讨论了getMethod()方法的使用以及枚举类型如何转化为Map。
摘要由CSDN通过智能技术生成

Json 字符串转 Map<String, Object>

JSONObject formOptions = jsonObject.getJSONObject(“formOptions”);
Map<String, Object> formOptionsMap = JSON.parseObject(formOptions.toString());
复制代码

Map转对象

  • 依赖 alibaba 的 fast-json
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>x.x.x</version>
</dependency>
复制代码
  • Map转对象
//将map 转换为 lpPersonInfoImg对象
PersonInfo PersonInfo = JSONObject.parseObject(JSONObject.toJSONString(map), PersonInfo.class);
复制代码

Map 初始化的四种方式

新建Map对象(最常见)

public class MapDemo{  
    private static final Map<String, String> map = new HashMap<String, String>();  
    static{
    	map.put("key1", "value1");  
    	map.put("key2", "value2"); 
    }  
} 
复制代码

Java8 新特性(双括号初始化)

HashMap<String, String > map  = new HashMap<String, String>(){{  
		put("key1", "value1");  
    	put("key2", "value2");       
}};  
复制代码

Java9新特性(最简便、不可变集合)

Map.of("key1", "value1", "key2", "value2"); // 不可变集合
复制代码

Google Guava(第三方依赖库、不可变集合)

引入maven依赖

<dependency>
	<groupId>com.google.guava</groupId>
	<artifactId>guava</artifactId>
	<version>19.0</version>
</dependency>
复制代码
Map<String, String> map = ImmutableMap.of("key1", "value1", "key2", "value2", "key3", "value3"); // 不可变集合
复制代码

注:不可变集合优点

  • 在多线程操作下,是线程安全的。
  • 所有不可变集合会比可变集合更有效的利用资源。
  • ==中途不可改变。==
  • 当对象被不可信的库调用时,不可变形式是安全的。
  • 不可变集合不需要考虑变化,因此可以节省时间和空间。
  • 不可变对象因为有固定不变,可以作为常量来安全使用。

Java 数组转Set

Java流(Steam)实现(List,Map适用)

import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;

public class Main {

	public static void main(String[] args) {
		Integer[] arr = {1,2,3,3};
		
		Set<Integer> set = Arrays.stream(arr).collect(Collectors.toSet());//适用于JDK>=1.8
		
		for (Integer integer : set) {
			System.out.println(integer);//【输出:1,2,3】
		}

	}

}
复制代码

"Collections.addAll()"方法

String[] num = new String[] { "One", "Two", "Three", "One", "Six" };

Set<String> set=new HashSet<>();

Collections.addAll(set,num);

System.out.println(set);//输出【[Six, One, Two, Three]】
复制代码

"Arrays.asList()"方法(array⇒list⇒set)

String[] num = new String[] { "One", "Two", "Three", "One", "Six" };

Set<String> set = new HashSet<>(Arrays.asList(num)); //不推荐,大小固定不能增删

System.out.println(set);
复制代码

getMethod()方法使用

getMethod方法要注意的地方:

  • 第一个参数是mName "方法名称";
  • 第二个参数是 "方法参数的类对象"。
// 类对象.getMethod(mName, HttpServletRequest.class, HttpServletResponse.class);
Class.getMethod(mName, HttpServletRequest.class, HttpServletResponse.class);
复制代码

示例:抽取出的通用的servlet(页面请求经过的第一个servlet,所有页面请求必须经过的一个servlet, baseservlet)

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	try {
		//1.获取方法名称
		String mName = request.getParameter("method");
           
		//2.获取方法对象
 		Method method = this.getClass().getMethod(mName,HttpServletRequest.class,HttpServletResponse.class);
            
		//3.让方法执行,接受返回值
		String path = (String) method.invoke(this, request,response);
            
		//4.判断返回值是否为空,若不为空,统一处理请求转发
		if(null != path) {
			request.getRequestDispatcher(path).forward(request, response);
		}
	} catch (Exception e) {
		e.printStackTrace();
		throw new RuntimeException();
	}
}
复制代码

这是一个具体执行某类操作的servlet(这里是执行用户注册的servlet,页面请求经过的第二个servlet,userservlet)

public String registUI(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	return "/jsp/register.jsp";
}
复制代码

枚举类型转为Map

  • 枚举基类
public interface IBaseEnum {

	String getCode();
	
	String getMessage();
}
复制代码
  • 自定义枚举类
public enum GlobalExceptionEnum implements IBaseEnum {

    EXCEPTION_ENUM("EC_0001", "未知异常,请联系项目管理员!"),
    RUNTIME_EXCEPTION_ENUM("EC_0002", "运行期间发生异常,请联系项目管理员!");

    private String code;
    private String message;

    GlobalExceptionEnum(String code, String message) {
        this.code = code;
        this.message = message;
    }

    @Override
    public String getCode() {
        return this.code;
    }

    @Override
    public String getMessage() {
        return this.message;
    }
}
复制代码
  • 枚举转换工具
public class EnumUtils {

    /**
     * @Description 将枚举转换成Map对象方便取值 - 固定类型- 仅为了提供思路 
     * @return
     */
    public static Map<String, String> convertToMap() {
        Map<String, String> mapResult = new HashMap<>();

        Arrays.stream(GlobalExceptionEnum.values()).forEach(globalExceptionEnum -> {
            mapResult.put(globalExceptionEnum.getCode(), globalExceptionEnum.getMessage());
        });

        return mapResult;
    }

    /**
     * @Description 真正的工具类 - 将枚举转为Map使用,只要参数 clazz 继承了IbaseEnum
     * @return
     */
    public static Map<String, String> generateConvertToMap(Class<? extends IBaseEnum> clazz) {
        Map<String, String> mapResult = new HashMap<>();

        if(!clazz.isEnum()) {
            throw new UnsupportedOperationException("参数不合法:非枚举类,不支持转换,请检查程序是否有误!");
        }

        // 通过class.getEnumConstants();获取所有的枚举字段和值
        IBaseEnum[] iBaseEnums = clazz.getEnumConstants();
        for (IBaseEnum iBaseEnum : iBaseEnums) {
            mapResult.put(iBaseEnum.getCode(), iBaseEnum.getMessage());
        }
        return mapResult;

    }

    // 测试使用
    public static void main(String[] args) throws InstantiationException,
            IllegalAccessException, InvocationTargetException {
        Map<String, String> mapResult1 = EnumUtils.convertToMap();
        System.out.println(mapResult1);
        // 这里是真正工具调用的地方
        Map<String, String> mapResult2 = EnumUtils.generateConvertToMap(GlobalExceptionEnum.class);
        System.out.println(mapResult2);
    }
}
复制代码

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值