java统计系统⼯具类
在某些常见的图形、表格统计系统中,往往需要计算同⽐、环⽐等等,下⾯是⾃⼰整理的常⽤统计⼯具类⽅法import s.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.rvlet.http.HttpServletRequest;
NumberFormat;
ParException;
SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
import Pattern;
/**
* 统计项⽬的⼯具类
*
* @author linmin
**/
public class StatisticsUtils {
/**
* 判断⼀个字符串是不是全是数字的正则匹配规则
*/
private static Pattern pattern = pile("^-?\\d+(\\.\\d+)?$");
/**
drillmyhole
* ⽇志记录对象
*/
private static final Logger logger = Logger(StatisticsUtils.class);
private StatisticsUtils() {
}
/**
* 同⽐,环⽐均可⽤
* 获取增长率,保留四位⼩数
* 增长率=(本⽉数-上⽉数)/上⽉数×100%
* @param lastCount 上⽉的数据
* @param currentCount 本⽉的数据
* @return float
*/
public static String getGrowthRate(double lastCount, double currentCount) {
double growthRate;
if (lastCount == 0) {
growthRate = 1;
} el {
growthRate = (float) (currentCount - lastCount) / lastCount;
}
//保留4为⼩数
return String.format("%.4f", growthRate);
}
/**
* 获取占⽐
* @param molecular 分⼦
* @param denominator 分母
* @return 返回占⽐
*/
public static String getProportion(double molecular, double denominator) {
String proportion;
if (denominator == 0) {
proportion = "";
} el {
double pro = molecular / denominator;
proportion = String.format("%.4f", pro);
}
return proportion;
}
/**
* 把对象转换成双精度数据
* @param object object
* @return 双精度数据
*/
public static double getObjectToDouble(Object object) {
String str = String.valueOf(object).trim();
if (StringUtils.isEmpty(str)) {
经济学人音频return 0;
}
if (!isNumber(str)) {
throw new NumberFormatException("字符串⾥⾯不全是数字,不能转换");
}
return Double.parDouble(str);
}
/**
* 把对象转换成字符串
* @param object object
* @return String
*/
public static String getObjectToString(Object object) {
if(object==null){
return "";
}最流行的歌曲2013
return String.valueOf(object).trim();
itg}
/**
* 判断⼀个字符串是不是全是数字
* @param string 判断是不是全数字的字符串
* @return 布尔值
*/
private static boolean isNumber(String string) {
if (StringUtils.isEmpty(string)) {
return fal;
}
return pattern.matcher(string).matches();
}
/**
* 获取昨年和今年同⽐的数据
* @param thisYearList 今年的数据
* @param lastYearList 昨年的数据
北京播音主持培训* @return 同⽐数据集合
*/
public static List<Map<String, Object>> getYearOnYearList(List<Map<String, Object>> thisYearList, List<Map<String, Object>> lastYearList) { //住院总费⽤同⽐增长集合
List<Map<String, Object>> yearOnYearZngeList = new ArrayList<>();
for (int i = 0; i < thisYearList.size(); i++) {
//获取今年每⽉对应的收⼊map
Map<String, Object> thisYearMap = (i);
//获取去年每⽉对应的收⼊map
Map<String, Object> lastYearMap = (i);
Object thisYearCost = ("thisYearCost");
Object lastYearCost = ("lastYearCost");
double thisYearCount = ObjectToDouble(thisYearCost);
double lastYearCount = ObjectToDouble(lastYearCost);
//根据去年和今年的总收⼊算出对应的增长率
String growthRate = GrowthRate(lastYearCount, thisYearCount);
//时间横坐标 1⽉、 2⽉……
String dateAbscissa = (String) ("dateAbscissa");
//每次计算得出的增长率map
Map<String, Object> yearOnYearMap = new HashMap<>(16);
/
/吧每⽉对应的增长率放⼊map
yearOnYearMap.put("dateAbscissa", dateAbscissa);
yearOnYearMap.put("thisYearCount",thisYearCount);
yearOnYearMap.put("lastYearCount",lastYearCount);
yearOnYearMap.put("growthRate", growthRate);
yearOnYearZngeList.add(yearOnYearMap);
}
return yearOnYearZngeList;
}
/**
* 获取双精度数据的后⼏位数据
* @param d 双精度数据
* @param digit 需要保留⼩数点后⼏位
* @return 返回处理后的字符串对象
*/
public static String getNumberFormatByDecimalPlaces(double d, int digit) {
NumberFormat numberInstance = NumberInstance();
numberInstance.tMaximumFractionDigits(digit);
return numberInstance.format(d);
}
/**
* 获取上⽉环⽐⽇期
* @param date 本⽉⽇期
* @param formatPattern ⽇期的匹配格式
* @return 获取上⽉环⽐⽇期
got*/
private static String getLastMouthDate( String date,String formatPattern){
Date lastMouth=new Date();
try {
SimpleDateFormat format = new SimpleDateFormat(formatPattern);
Date currentDate = format.par(date);
Calendar c = Instance();
c.tTime(currentDate);
c.add(Calendar.MONTH, -1);
lastMouth = c.getTime();
} catch (ParException e) {
卡萨布兰卡歌曲("获取环⽐⽇期异常",e);
}
return format(lastMouth,formatPattern);
}
/**
* 获取去年同⽐⽇期
* @param date 今年对应的⽇期
* @param formatPattern ⽇期的匹配格式
* @return 获取去年同⽐⽇期
*/
public static String getLastYearDate( String date,String formatPattern){
Date lastYear=new Date();
try {
SimpleDateFormat format = new SimpleDateFormat(formatPattern);
Date currentDate = format.par(date);
Calendar c = Instance();
c.tTime(currentDate);
c.add(Calendar.YEAR, -1);
lastYear = c.getTime();
} catch (ParException e) {
<("获取同⽐⽇期异常",e);
}
return format(lastYear,formatPattern);
}
/**
* 格式化时间成字符串
* @param time 需要格式化的时间
* @param formatPattern ⽇期的匹配格式
* @return 返回对应格式的时间字符串
*/
private static String format(Date time,String formatPattern) {
SimpleDateFormat sdf = new SimpleDateFormat(formatPattern);
return sdf.format(time);
lcn
}
/**
* 获取上期环⽐搜索条件(移除以前的时间参数值)
* @param archConditionalParameters 搜索条件map
* @param startDate 开始时间
* @param endDate 结束时间
*/
public static Map<String, Object> replaceLastMouthConditional( Map<String, Object> archConditionalParameters,String startDate ,String endDate ){
archConditionalParameters.put(Constant.Describe(),LastMouthDate(startDate,Constant.DATE_Describe()));
archConditionalParameters.put(Constant.Describe(),LastMouthDate(endDate,Constant.DATE_Describe()));
return archConditionalParameters;
}
/**
* 获去年同⽐搜索条件(移除以前的时间参数值)
* @param archConditionalParameters 搜索条件map
* @param startDate 开始时间
* @param endDate 结束时间
*/
public static Map<String, Object> replaceLastYearConditional( Map<String, Object> archConditionalParameters,String startDate ,String endDate ){
archConditionalParameters.put(Constant.Describe(),LastYearDate(startDate,Constant.DATE_Describe()));
archConditionalParameters.put(Constant.Describe(),LastYearDate(endDate,Constant.DATE_Describe()));
return archConditionalParameters;
}
/**
* 获取开始时间,如果没有传⼊时间,则默认当年的1⽉1⽇
* @param request 客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的⽅法,可以获得客户端请求的所有信息 * @return 开始时间字符串
*/
public static String getStartDate(HttpServletRequest request){
String startDate = Parameter(Constant.Describe());
LocalDate w();洋泾中学
if (StringUtils.isEmpty(startDate)){
Year()+"-01-01";
}
return startDate;
}
/**
* 获取结束时间,如果没有传⼊时间,则默认当前时间
* @param request 客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的⽅法,可以获得客户端请求的所有信息 * @return 结束时间字符串
burdensome
*/
public static String getEndDate(HttpServletRequest request){
String endDate = Parameter(Constant.Describe());
LocalDate w();
if (StringUtils.isEmpty(endDate)){ String(); }
return endDate;
}
}