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); } } 复制代码