/**double 数据类型*/
private static final String STR_DOUBLE="double";
/**INT 数据类型*/
private static final String STR_INT="int";
/**long 数据类型*/
private static final String STR_LONG="long";
/**标志位*/
private static final String TOTAL_PROPERTY_NAME="sumFlag";
/**统计所有数据*/
public static final String SUM_FLAG_TOTAL="SUM_FLAG_TOTAL";
/**分组统计数据*/
public static final String SUM_FLAG_GROUP = "SUM_FLAG_GROUP";
private static final String STR_EMPTY = "";
private static final String STR_ZERO = "0.0";
private static final String SITE_FIRST = "first";
private static final String SITE_LAST = "last";
private static final Logger log = Logger.getLogger(GroupUtil.class);
public GroupUtil() {
super();
}
public static Collection appendTotal(Collection datas,String[] sumPropertys){
if(datas==null){
return null;
}
if(datas.size()==0){
return datas;
}
ArrayList coll = new ArrayList();
try{
coll.addAll(datas);
appendTotalObj(coll,sumPropertys,SUM_FLAG_TOTAL,SITE_LAST);
}catch(Exception e){
log.error(e.getMessage());
coll = null;
}
return coll;
}
public static Collection group(Collection datas,String groupProperty,String[] sumPropertys){
if(datas==null){
return null;
}
if(datas.size()==0){
return datas;
}
Collection resultVals = groupBy4Datas(datas,groupProperty,sumPropertys,SITE_LAST);
return resultVals;
}
public static Collection group(Collection datas,
String groupProperty,
String[] sumPropertys, boolean sumRowAtFirst) {
if (datas == null) {
return null;
}
if (datas.size() == 0) {
return datas;
}
if (sumRowAtFirst) {
return groupBy4Datas(datas, groupProperty, sumPropertys,
SITE_FIRST);
}
else {
return groupBy4Datas(datas, groupProperty, sumPropertys,
SITE_LAST);
}
}
public static void appendTotalObj(List datas,String[] sumPropertys,String totalFlag,String site)
throws Exception{
BigDecimal bigDecimal = null;
String properTyp = null;
String strVal = null;
Object obj = null;
Map map = new HashMap();
for(int i=0;i<sumPropertys.length;i++){
bigDecimal = new BigDecimal(STR_ZERO);
for(int j=0;j<datas.size();j++){
obj = datas.get(j);
if(properTyp==null){
properTyp = getPropertyTypName(obj,sumPropertys[i]);
}
strVal = BeanUtils.getProperty(obj,sumPropertys[i]);
bigDecimal = bigDecimal.add(new BigDecimal(strVal));
}
if(properTyp.equals(STR_DOUBLE)){
map.put(sumPropertys[i],bigDecimal.doubleValue()+STR_EMPTY);
}else if(properTyp.equals(STR_INT)){
map.put(sumPropertys[i],bigDecimal.intValue()+STR_EMPTY);
}else if(properTyp.equals(STR_LONG)){
map.put(sumPropertys[i],bigDecimal.longValue()+STR_EMPTY);
}
properTyp = null;
}
Object newObj = getNewObj(obj,totalFlag);
BeanUtils.copyProperties(newObj,map);
if(SITE_LAST.equals(site)){
datas.add(newObj);
}else{
((List)datas).add(0,newObj);
}
}
protected static String getPropertyTypName(Object obj,String property) throws Exception{
String name = STR_EMPTY;
PropertyDescriptor proDes = PropertyUtils.getPropertyDescriptor(obj,property);
Class propertyClass = proDes.getPropertyType();
name = propertyClass.getName();
return name;
}
protected static Object getNewObj(Object obj,String totalFlag) throws Exception{
Object newObj = obj.getClass().newInstance();
Map map = new HashMap();
map.put(TOTAL_PROPERTY_NAME,totalFlag);
BeanUtils.copyProperties(newObj,obj);
BeanUtils.copyProperties(newObj,map);
return newObj;
}
protected static Collection groupBy4Datas(Collection datas,String groupProperty,
String[] sumPropertys, String site){
ArrayList totalList = new ArrayList();
Collection resultVals = null;
try{
totalList.addAll(datas);
appendTotalObj(totalList,sumPropertys,SUM_FLAG_TOTAL,SITE_LAST);
Object obj = totalList.remove(totalList.size()-1);
Map splitMap = splitDatas(totalList,groupProperty);
ArrayList keyList = new ArrayList();
keyList.addAll(splitMap.keySet());
Iterator it = keyList.iterator();
List coll = null;
while(it.hasNext()){
coll = (List)splitMap.get(it.next());
appendTotalObj(coll,sumPropertys,SUM_FLAG_GROUP,site);
}
Collections.sort(keyList);
resultVals = new ArrayList();
it = keyList.iterator();
while(it.hasNext()){
coll = (List) splitMap.get(it.next());
resultVals.addAll(coll);
}
resultVals.add(obj);
}catch(Exception ex){
log.error(ex.getMessage());
resultVals = null;
}
return resultVals;
}
protected static Map splitDatas(List datas,String groupProerty)throws Exception{
Map splitDatas = new HashMap();
Iterator it = datas.iterator();
Object obj = null;
String key = null;
List splitList = null;
while(it.hasNext()){
obj = it.next();
key = BeanUtils.getProperty(obj,groupProerty);
if(splitDatas.containsKey(key)){
splitList = (List)splitDatas.get(key);
splitList.add(obj);
}else{
splitList = new ArrayList();
splitList.add(obj);
splitDatas.put(key,splitList);
}
}
return splitDatas;
}
String[] sumPropertys = {"accuDepr","mdeprqu"};
return GroupUtil.group(fiaValChaDAO.query4Excel(para),"assetTyp",sumPropertys);
分享到:
相关推荐
易语言ACCESS数据库分类统计源码,ACCESS数据库分类统计,填表格
ACCESS数据库分类统计.rar
出口技术复杂度的计算来源于联合国国际贸易分类统计数据库标准的SITC及HS代码分 类的制造业出口产品数据 4.参考文献: [1]戴魁早,方杰炜.贸易壁垒对出口技术 复杂度的影响——机制与中国制造业的证据[J].国际贸易...
资源介绍:。源码结合高级表格支持库,主要对MDB数据库进行分类统计计算。通过执行SQL语句来得到相关的记录集,支持按照经销商和产品进行分类统计求和。资源作者:。@数据库教程。资源界面:。资源下载:。
2014最全的全国省市区mysql数据库,与国家统计局数据同步,46462条,包含简称,地理位置经纬度,无限分类结构,包含港澳台。地区含有经纬度
ChineseLyrics中文歌词数据库【NLP自然语义处理数据集】 10W+首歌词数据, 给做NLP和数据分析领域的朋友们提供参考 通过网络收集整理的中文歌词数据库, 包含: 绝大多数华语歌手在2019年之前的歌曲 4019位歌手, 其中...
【例】 在sell表中按图书编号分类统计订单数和订单的平均订购册数 SELECT 图书编号,AVG(订购册数) AS '订购册数',COUNT(订单号) AS '订单数' FROM Sell GROUP BY 图书编号; ; 使用带ROLLUP操作符的GROUP BY子句,可...
利用matlab实现的贝叶斯分类算法,其中包含数据格式转换算法,交叉验证算法和数据集统计算法,是UCI数据集通用的分类算法,准确率达到0.9427.
基于MATLAB的SVM支持向量机的数据分类,包括训练,测试,以及数据库 B.程序实现流程: 第一步: 为了简化计算,可对得到的图像特征数据进行标准化 将数据通过函数变换映射到[0.1,1] 第二步: 图像特征集合中信息特征...
数据库主要内容林权权属数据库内容主要包括:林权小班矢量数据、林权小班属性数据、元数据、政区代码标准数据、林业相关标准数据、统计标准、报告文件、扫描文件与其他数据。根据实际需求需要集成或整合的其他系统...
易语言ACCESS数据库分类统计.zip易语言项目例子源码下载易语言ACCESS数据库分类统计.zip易语言项目例子源码下载 1.合个人学习技术做项目参考 2.适合学生做毕业设计参考 3.适合小团队开发项目参考
以有意义的方式安排数据可能是一种挑战。有时您只需进行简单分类。通常您必须进行更多处理——进行分组以利于分析与总计。可喜的是SQL提供了大量用于分类、分组和总计的子句及运算符。本文的建议将有助于您了解何时...
统计用产品分类目录,采集自国家统计局网站。数据库版本与excel版本有偿提供。微信xujianshi2012
2022年度全国统计用区划代码和城乡划分代码数据库,为2022年全国统计用区划代码(12位)和城乡分类代码(3位),地域范围为国家统计局开展统计调查的全国31个省(自治区、直辖市),未包括我国台湾省、香港特别行政...
对IRIS数据集进行分组,分类
2014最全的全国省市区mysql数据库,与国家统计局数据同步,46593条,包含简称,地理位置经纬度,无限分类结构
机采自 2017最新统计局数据 国民经济行业分类与代码(GB/T 4754-2017),四级 mysql带上下级数据,需要三级的或者json数据的请看我的其他分享
基于统计量特征的数据库指纹方法pdf 基于铁路数据服务平台的多源数据融合架构研究.pdf 大数据应用中的数据安全治理技术与实践.pdf 《数据安全治理白皮书 4.0》全文,pdf 中国非结构化数据中台实践白皮书,pdf 信息通信...
子""对统计业务工作起到什么作用""对统计数据资 源建设起到什么作用"这三个问题展开论述在 国内企业一套表制度实行以后,上海统计局和厦门 统计局基于国家企业一套表元数据库和元数据标 准,结合实际统计工作,开发...