/**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数据库分类统计.rar"为例,假设我们有一个包含员工信息和销售数据的数据库,可以先通过SQL查询按部门分类统计员工人数,再按产品类别统计销售额。易语言程序会执行这些操作,并将结果以图表或表格的形式...
《矿产资源储量登记统计数据库标准》是中国在矿产资源管理领域的一项重要规范,旨在统一和规范全国各级国土资源管理部门在矿产资源储量登记和统计工作中的数据管理与交换。该标准详细规定了数据库的术语、定义、代码...
联合国商品贸易统计数据库(UN Comtrade)是全球范围内获取国际贸易数据的重要资源,它提供各国间的商品进出口统计数据。这个数据库由联合国统计司维护,为研究人员、政策制定者、学者以及公众提供了一个全面、详尽...
《ACCESS数据库分类统计易语言源码解析》 在IT领域,数据库管理是核心部分,而易语言作为一种简单易学的编程语言,常被用于开发各种数据处理应用。本资源聚焦于利用易语言处理ACCESS数据库的分类统计问题,帮助...
《中图分类(可导入数据库).zip》是一个包含中国图书馆分类法数据的压缩包,它提供了方便图书馆管理和信息检索的数据资源。这个压缩包主要包括两个文件:《中图分类数据.csv》和《中图分类数据库(树形结构).json》。 ...
Excel源文件可能是以表格形式展示了这个分类体系,包括每个类别的代码、名称、定义以及与之相关的统计数据或注解。这样的文件对于数据分析、报告编写和系统开发非常有用,因为它提供了清晰的数据结构和直观的可视化...
出口技术复杂度的计算来源于联合国国际贸易分类统计数据库标准的SITC及HS代码分 类的制造业出口产品数据 4.参考文献: [1]戴魁早,方杰炜.贸易壁垒对出口技术 复杂度的影响——机制与中国制造业的证据[J].国际贸易...
综上所述,数据挖掘技术在广东省统计病案数据库中的应用已经取得了积极的效果,并且在医院管理和决策支持方面展现了巨大的潜力。随着技术的不断发展和医疗改革的深入,数据挖掘技术在医疗领域的应用前景将更加广阔。...
在这个程序中,柱状图可能是通过图形库或者MFC的CHart控件来实现的,它可以帮助用户直观地理解数据统计结果,比如各分类的频数、比例或者趋势。柱状图的使用使得非技术人员也能轻松理解和解读统计数据。 **程序设计...
数据挖掘、数据分析、统计、数据库和SQL是信息技术领域中至关重要的组成部分,它们共同构成了现代大数据处理的核心技术。这些概念在当今的数据驱动世界中扮演着关键角色,帮助企业、机构和个人从海量数据中提取有...
"行业分类"则表示数据库包含了对企业的行业分类信息,这可能包括国民经济行业代码、行业类别、子行业等,有助于分析和统计不同行业的企业分布情况。"数据库"和"ACCESS"是这个资源的关键技术特征,表明它是基于Access...
在这个文件中,可以看到如何定义数据库连接对象,如何编写SQL语句进行数据检索,如何遍历查询结果并进行分类统计,以及如何将统计结果输出到控制台或用户界面。对于想要深入学习易语言数据库操作的开发者来说,这是...
2014最全的全国省市区mysql数据库,与国家统计局数据同步,46462条,包含简称,地理位置经纬度,无限分类结构,包含港澳台。地区含有经纬度
【塔塔统计数据库】是一个全面收集和整合中国经济各领域数据的专业数据库,主要包含八大数据库,分别是:中国宏观经济数据库、中国区域经济数据库、中国行业数据库、对外贸易数据库、中国金融数据库、产品产量及销售...
ChineseLyrics中文歌词数据库【NLP自然语义处理数据集】 10W+首歌词数据, 给做NLP和数据分析领域的朋友们提供参考 通过网络收集整理的中文歌词数据库, 包含: 绝大多数华语歌手在2019年之前的歌曲 4019位歌手, 其中...
联合国商品贸易统计数据库是全球最大的、最权威的国际商品贸易数据型资源,由联合国统计署创建。该数据库涵盖全球99%的商品交易,真实反映国际商品流动趋势。数据库收集了超过6000种商品、约17亿个数据记录,每年...
频数表数据也可以转换为数据库数据,但仅限于分类变量。 在实际应用中,数据库和频数表都是非常重要的数据形式,正确地选择和使用数据形式对统计分析结果的准确性和可靠性有着非常重要的影响。 在医学研究中,...
【例】 在sell表中按图书编号分类统计订单数和订单的平均订购册数 SELECT 图书编号,AVG(订购册数) AS '订购册数',COUNT(订单号) AS '订单数' FROM Sell GROUP BY 图书编号; ; 使用带ROLLUP操作符的GROUP BY子句,可...
用户可以通过SQL查询语句快速筛选、检索、排序和统计菜品数据,例如查找烹饪时间最短的菜品或按功效分类。 2. **JSON**:JavaScript Object Notation,是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...