进阶java大师之路,泛型在hashmap上的灵活运用

2023-11-19

由于,公司的试用的框架上,存在大量的hashmap的创建,产生大量的I/O 以及内存的消耗,所以,抽了点时间,看书 effective java 这本书。

同时,也从项目的作者 framework 上学习 ,吸取 ,最终写出了,符合生产的方案。

存在的问题是,一直困惑与hashmap的清除。

package com.framework.entity.factory;

import java.util.HashMap;

import org.apache.poi.ss.formula.functions.T;
import org.apache.tools.ant.types.resources.selectors.InstanceOf;

import com.framework.entity.CompanyFormMap;
import com.framework.entity.base.FormMap;

public class FrommapFactory {
	private static HashMap<Class<?>, ? extends FormMap<String, Object> > hashMap=new  HashMap<>();
	
	
	@SuppressWarnings({ "hiding", "unchecked" })
	public static <T> T getFromBeanMap(Class<? extends FormMap<String, Object>> type) {
		// TODO Auto-generated method stub
		if (hashMap.containsKey(type)) {
			FormMap<String, Object> t=hashMap.get(type);
			t.clear();
			return (T)t;
		}else {
			
			Object object = null;
			try {
				System.out.println(type.getSimpleName());
				object = Class.forName(type.getName());
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return (T) object;
		}
	}
	
	private static HashMap<T,  Object> hashMap2=new  HashMap<>();
	@SuppressWarnings("hiding")
	public static <T extends FormMap<String, Object>> T getFromBeanMap2(T t) {
		t.clear();
		FormMap<String, Object> formMap = (FormMap<String, Object>) t;
		
		
		
		return t;
	}
	
	
	
	private static HashMap<T,  Object> hashMap3=new  HashMap<>();
	@SuppressWarnings({ "unchecked", "hiding" })
	public static <T> T getBeanFormMap(Class<T> clazz) throws InstantiationException, IllegalAccessException{
		if (hashMap3.containsKey(clazz)) {
			FormMap<String, Object> formMap = (FormMap<String, Object>) hashMap3.get(clazz);
			T t=(T) hashMap3.get(clazz);
			formMap.clear();
			return t;
		}else {
			T t=clazz.newInstance();
			return t;
		}
	}
	
	
	
	public static void main(String[] args) throws InstantiationException, IllegalAccessException {
		CompanyFormMap companyFormMap=getBeanFormMap(CompanyFormMap.class);
		System.out.println(companyFormMap);
	}
}

前面第一个,是看书之后的结果。

有错误。

估计就是class 与 map ,不能有效的相互转换,或者转换太多。

最后一个就是符合方案的产品了。

其实还是可以优化的,

就是利用 T extends ?

不过,我没有测试。觉得麻烦。

大道至简。

2.0补充

// Json生成Map,2.0 ,破解了复杂,list,树
@SuppressWarnings("unchecked")
public static Map<String, Object> jsonToMap(String jsonString) throws JSONException {
// JSONObject必须以"{"开头
JSONObject jsonObject = JSONObject.fromObject(jsonString);
Map<String, Object> resultMap = new HashMap<String, Object>();
Iterator<String> iter = jsonObject.keys();
String key = null;
Object value = null;
while (iter.hasNext()) {
key = iter.next();
value = jsonObject.get(key);
if (value.getClass() == JSONArray.class) {
JSONArray jsonArray = JSONArray.fromObject(value);
for (Object list : jsonArray) {
Map<String, Object> resultMap2 = jsonToMap(list.toString());
resultMap.put(key, resultMap2);
}
} else {
resultMap.put(key, value);
}
}
// System.out.println(resultMap);
/*
* 打印结果{map={"sex":"female","age":"23","name":"Alexia"},
* employ={"sex":"female","age":"24","name":"wjl"}}
*/
return resultMap;
}


// Json生成Map,2.0 ,破解了复杂,list,树
@SuppressWarnings("unchecked")
public static <T extends FormMap<String, Object>> T  jsonToMap(String jsonString,Class<T> clazz) throws JSONException, InstantiationException, IllegalAccessException {
// JSONObject必须以"{"开头
JSONObject jsonObject = JSONObject.fromObject(jsonString);
T t=clazz.newInstance();
Iterator<String> iter = jsonObject.keys();
String key = null;
Object value = null;
while (iter.hasNext()) {
key = iter.next();
value = jsonObject.get(key);
if (value.getClass() == JSONArray.class) {
JSONArray jsonArray = JSONArray.fromObject(value);
for (Object list : jsonArray) {
Map<String, Object> resultMap2 = jsonToMap(list.toString());
t.put(key, resultMap2);
}
} else {
t.put(key, value);
}
}
// System.out.println(resultMap);
/*
* 打印结果{map={"sex":"female","age":"23","name":"Alexia"},
* employ={"sex":"female","age":"24","name":"wjl"}}
*/
return t;
}

————————————————

普通类的使用

 // 定义一个泛型类
    private class GenericClass<T> {
        // 在此处定义泛型类的属性和方法

        private List<T> getCsvToBean (Class<? extends T> obj, String pathname) {
            CSVReader reader = null;
            try {
                reader = new CSVReader(new FileReader(pathname));
                String[] nextLine = reader.readNext();
                // 读取每行数据
                int columnCount = nextLine.length;

                ColumnPositionMappingStrategy<T> strategy = new ColumnPositionMappingStrategy<>();
                strategy.setType(obj);
                String[] columnMapping = new String[columnCount];
                for (int i = 0; i < columnCount; i++) {
                    columnMapping[i] = String.valueOf(i);
                }
                strategy.setColumnMapping(columnMapping);

                CsvToBean<T> csvToBean = new CsvToBeanBuilder<T>(reader)
                        .withMappingStrategy(strategy)
                        .build();

                List<T> parse = csvToBean.parse();
                return parse;
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }

    }
    
    
    
       GenericClass<AcsCmOrderDto> genericClass = new GenericClass();
                    List<AcsCmOrderDto> csvToBean = genericClass.getCsvToBean(AcsCmOrderDto.class, pathname);
                    cmOrderDtoList = csvToBean;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进阶java大师之路,泛型在hashmap上的灵活运用 的相关文章

随机推荐

  • pandas---数据处理(excel文件)

    近期在弄一个项目的前期数据 所以总结了一下 内容如下 以下以csv文件为例 1 DataFrame常用操作 1 1 DataFrame去除空行 1 对于一般空行 2 对于列表式 list 空行 1 2 数据的填充 1 表格中填充0 1 3
  • Jenkins安装及基础环境配置

    原文地址 Jenkins安装及基础环境配置 BIGTREE Jenkins服务安装 方式1 下载jenkins war包 直接tomcat或者java jar jenkins war运行 方式2 直接jenkins msi安装 Window
  • mybatis逆向工程之动态web项目

    有了逆向工程 单表的增删改查以及相关的实体类 还有属性注释都不用自己写了 都可以自动化生成 只需如下三步即可 逆向工程的优点是 自动化生成实体类和对应的增删改查 效率相对于之前个人开发时一个个写增删改查要高的多 逆向工程的缺点是 xml中的
  • 《硬件接入》3288板刷机及屏幕参数配置探索

    最近在工控机上做了项目 涉及到地磅接入 打印机接入 海康威视摄像头接入等功能 摸索下来其实硬件接入都是比较简单的事 一般1 2天就可以完成一个单独模块开发了 不过也遇到一些比较麻烦的事 比如买的3288板工控机 刷的固件是6 0 1 这个固
  • C++ 获取文件版本号的代码

    Test cpp 定义控制台应用程序的入口点 include stdafx h include
  • HTML连载85-添加选择圆点

    一 添加选择圆点 先上个半成品 div class top div class top in div class top left div div div
  • 云计算——ACA学习 云计算核心技术

    作者简介 一名云计算网络运维人员 每天分享网络与运维的技术与干货 座右铭 低头赶路 敬事如仪 个人主页 网络豆的主页 写在前面 本系列将会持续更新云计算阿里云ACA的学习 了解云计算及网络安全相关从业的基础知识 以及阿里云产品的使用部署 提
  • 2023智慧城区统一运营白皮书

    本白皮书讨论的 智慧城区 概念 是围绕多种服务业态 特定区域的智慧统一运营管理服务 我们从管理属性 服务业态 管理面积 智慧化程度4个方面对智慧城区分析 把以企业为主导 政府相关部门 社会组织 城区居民等多方协同治理 通过跨业态 跨空间的智
  • matlab中产生随机点,如何在matlab中制作圆形并在里面生成随机点

    这里的另一种选择 Set parameters R 0 5 radius C 3 4 center x y N 50 number of points inside circle generate circle boundary t lin
  • MATLAB2012a下载、安装及破解方法

    下载地址如下 http yunpan cn cyjGMugpDGsse 提取码 32e8 安装步骤如下 1 解压压缩包 打开文件夹内的setup exe 2 选择 不使用Internet安装 3 接受许可协议条款 点击 是 4 选择 我已有
  • Python,燃气火焰检测主要步骤!

    问题描述 在现有的基础上 燃气火焰的检测主要是基于火焰颜色特征 由于燃气火焰不同于普通火焰 其中蓝色分量较多 一般的检测方法准确度不够 故采取其他方法来检测火焰 下面主要介绍4个步骤的思路和主要的 python 代码 解决方案 1 背景差分
  • Python和Matplotlib电磁一维二维三维模拟

    自由空间中传播的脉冲一维模拟 自由空间的时间相关麦克斯韦旋度方程为 E
  • vue3中的readonly

    接受一个对象 不论是响应式还是普通的 或是一个 ref 返回一个原值的只读代理 只读代理是深层的 对任何嵌套属性的访问都将是只读的 它的 ref 解包行为与 reactive 相同 但解包得到的值是只读的 类型 function reado
  • VS2019版本下载详细介绍~

    一 下载地址 第一种方法 VS官网 Visual Studio 2022 IDE 适用于软件开发人员的编程工具 因为官网现在主推2022版本的VS 所以需要选择老旧版本下载 点击下载按钮 向下滑动 该方法需要登录微软账户 才能选择老旧版本的
  • sort的用法

    sort的用法 详细见cplusplus 1 默认的sort函数是按升序排 对应于1 sort a a n 两个参数分别为待排序数组的首地址和尾地址 2 可以自己写一个cmp函数 按特定意图进行排序 对应于2 例如 sort algorit
  • SOIL在VS2015搭建

    这是SOIL库的主页 http www lonesock net soil html 下载好解压 进project vc9 用Vs打开项目 编译记得用release 如果用的OPengl是64位的就用64位编译 不然生成的lib不能用 运行
  • 积分图像(Integral Image)和积分直方图

    积分图像文章推荐 http blog sina com cn s blog 4cb0b54301017wwo html https blog csdn net u010807846 article details 50354000 参考文献
  • vue-router的routes中name属性作用详解

    我们常用vue js和vue router来创建单页应用 vue router能很方便的管理所有的单页组件 我们在定义每个路由的时候会有一个name的属性 如下面代码 通常我们不定义这个属性发现也没有任何问题 那么这个name到底有什么用呢
  • R语言绘图:实现数据点的线性拟合,进行显著性分析(R-squared、p-value)、添加公式到图像

    最近在做关于数据点线性拟合相关的研究 感觉R语言在这方面很方便 而且生成的图片很漂亮 所以在这里和大家分享一下代码 这是别人所绘制的拟合图像 很漂亮 自己也用iris鸢尾花数据集进行一个线性拟合看看 拟合线性模型最基本的函数就是lm 格式为
  • 进阶java大师之路,泛型在hashmap上的灵活运用

    由于 公司的试用的框架上 存在大量的hashmap的创建 产生大量的I O 以及内存的消耗 所以 抽了点时间 看书 effective java 这本书 同时 也从项目的作者 framework 上学习 吸取 最终写出了 符合生产的方案 存