按不同的类型统计数量
1.创建一个bo
import lombok.Data;
@Data
public class SystemInfoBo {
/**编号*/
private String id;
/**类型*/
private String type;
/**超过限定值的数量*/
private long beyondCount;
/**类型总数*/
private long TypeCount;
}
2.处理数据
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class AmountTest {
public static void main(final String[] args) {
/**统计结果集中相同编号,不同类型的数量,count大于45的数量*/
final List<Map<String,Object>> list = queryList();
final List<SystemInfoBo> listBo=new ArrayList<SystemInfoBo>();
Map<String ,Map<String,SystemInfoBo>> sysMap=null;
for (final Map<String, Object> map : list) {
final String id= (String) map.get("id");
final String type = (String) map.get("type");
sysMap=sysMap==null?new HashMap<String, Map<String,SystemInfoBo>>():sysMap;
Map<String, SystemInfoBo> tMap = sysMap.get(id);
tMap=tMap==null?new HashMap<String, SystemInfoBo>():tMap;
SystemInfoBo sysBo = tMap.get(type);
if(sysBo==null){
sysBo=new SystemInfoBo();
sysBo.setId(id);
sysBo.setType(type);
sysBo.setTypeCount(0);
sysBo.setBeyondCount(0);
//将数据封装到listBo中
listBo.add(sysBo);
}
//对不同的类型 计数
long sCount = sysBo.getTypeCount();
sCount++;
sysBo.setTypeCount(sCount);
final String c = (String) map.get("count");
final BigDecimal big=new BigDecimal(c);
//超过限定值45则计数
if(big.compareTo(new BigDecimal("45"))==1){
long beyondCount = sysBo.getBeyondCount();
if(beyondCount>0){
beyondCount++;
sysBo.setBeyondCount(beyondCount);
}else{
sysBo.setBeyondCount(1);
}
}
tMap.put(type, sysBo);
sysMap.put(id, tMap);
}
log.info("======================原始数据==========================");
for (final Map<String, Object> map: list) {
System.out.println("编号:"+map.get("id")+" 类型:"+map.get("type")+" 数量: "+map.get("count"));
}
log.info("=====================处理后数据==========================");
//打印结果listBo
for (final SystemInfoBo bo : listBo) {
System.out.println("编号:"+bo.getId()+" 类型:"+bo.getType()+" 超过限定值数量:"+bo.getBeyondCount()+" 该类型数量:"+bo.getTypeCount());
}
}
//获取查询结果集
private static List<Map<String,Object>> queryList(){
/**
* 数据如下结构
* id type count
* NO010001 T 50
* NO010001 B 40
* NO010001 T 60
* NO010002 T 50
* NO010002 B 10
* NO010003 A 75
*
*/
final Map<String, Object> map1=new HashMap<String, Object>();
map1.put("id", "NO010001");
map1.put("type", "T");
map1.put("count", "50");
final Map<String, Object> map2=new HashMap<String, Object>();
map2.put("id", "NO010001");
map2.put("type", "B");
map2.put("count", "40");
final Map<String, Object> map3=new HashMap<String, Object>();
map3.put("id", "NO010001");
map3.put("type", "T");
map3.put("count", "60");
final Map<String, Object> map4=new HashMap<String, Object>();
map4.put("id", "NO010002");
map4.put("type", "T");
map4.put("count", "50");
final Map<String, Object> map5=new HashMap<String, Object>();
map5.put("id", "NO010002");
map5.put("type", "B");
map5.put("count", "10");
final Map<String, Object> map6=new HashMap<String, Object>();
map6.put("id", "NO010003");
map6.put("type", "A");
map6.put("count", "75");
final List<Map<String,Object>> listMap=new ArrayList<Map<String,Object>>();
listMap.add(map1);
listMap.add(map2);
listMap.add(map3);
listMap.add(map4);
listMap.add(map5);
listMap.add(map6);
return listMap;
}
}
3.运行结果:
信息: ======================原始数据==========================
编号:NO010001 类型:T 数量: 50
编号:NO010001 类型:B 数量: 40
编号:NO010001 类型:T 数量: 60
编号:NO010002 类型:T 数量: 50
编号:NO010002 类型:B 数量: 10
编号:NO010003 类型:A 数量: 75
信息: =====================处理后数据==========================
编号:NO010001 类型:T 超过限定值数量:2 该类型数量:2
编号:NO010001 类型:B 超过限定值数量:0 该类型数量:1
编号:NO010002 类型:T 超过限定值数量:1 该类型数量:1
编号:NO010002 类型:B 超过限定值数量:0 该类型数量:1
编号:NO010003 类型:A 超过限定值数量:1 该类型数量:1