前言
在平常开发中总会碰到相应的数据转换,比如将查询的数据转换为周月年然后在前台以折线图的方式表现。
提示:以下是本篇文章正文内容,下面案例可供参考
一、转换步骤
1.VO类
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 用户来源渠道统计表
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StatUserRealnameVO {
private Integer id;
/**
* 统计日期(@JsonFormat:将Date转换成String 一般后台传值给前台时)
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date statTime;
/**
* 当日实名用户数量
*/
private Integer userRealnameCount;
/**
* 当日实名个人用户数量
*/
private Integer userPersionCount;
/**
* 当日实名企业用户数量
*/
private Integer userBusinessCount;
}
注意:可能有时间丢失的状况发生
2.转换为周数据
private List<StatUserChannelVO> statUserChannelVOToWeekData(List<StatUserChannelVO> voList) {
if (voList == null) {
return null;
}
HashMap<Integer, StatUserChannelVO> map = new LinkedHashMap<>();
for (StatUserChannelVO r : voList) {
Date date = r.getStatTime();
Calendar calendar = Calendar.getInstance();
//先设置一周的第一天为周一,然后存入时间,取出每次时间为第几周并以其为key
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setTime(date);
int key = calendar.get(Calendar.WEEK_OF_YEAR);
// 以key取出map中的值
StatUserChannelVO vo = map.get(key);
//如果值为空则存入,如果不为空则将相同key的值数据合并,累加数据
if (vo == null) {
vo = new StatUserChannelVO();
try {
PropertyUtils.copyProperties(vo, r);
} catch (Exception e) {
log.error("拷贝属性异常:{}", e.getMessage(), e);
return null;
}
//获得某周最后一天,因为默认不是周日
int year = calendar.get(Calendar.YEAR);
Date dateWeek = getLastDayOfWeek(year, key);
vo.setStatTime(dateWeek);
} else {
vo.setUnisoundCount(vo.getUnisoundCount() + r.getUnisoundCount());
vo.setSemCount(vo.getSemCount() + r.getSemCount());
vo.setOtherCount(vo.getOtherCount() + r.getOtherCount());
vo.setNullCount(vo.getNullCount() + r.getNullCount());
vo.setUserAllCount(vo.getUserAllCount() + r.getUserAllCount());
}
map.put(key, vo);
}
Collection<StatUserChannelVO> values = map.values();
List<StatUserChannelVO> sucvoList = new ArrayList<>(values);
return sucvoList;
}
/**
* 获得某周最后一天
*
* @param year
* @param week
* @return
*/
public static Date getLastDayOfWeek(int year, int week) {
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR, year);
//设置周
cal.set(Calendar.WEEK_OF_YEAR, week);
//设置该周第一天为星期一
cal.setFirstDayOfWeek(Calendar.MONDAY);
//设置最后一天是星期日
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek() + 6); // Sunday
//格式化日期
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//String lastDayOfWeek = sdf.format(cal.getTime());
return cal.getTime();
}
3.转换为月数据
//其他上下大致一样只有在日期设置这里有些不同
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
//因为这个值的初始值是0,因此我们要用它来表示正确的月份时就需要加1。
int key = calendar.get(Calendar.MONTH) + 1;
4.转换为年数据
int key = calendar.get(Calendar.YEAR);
# 总结
以上就是今天要讲的内容,本文仅仅简单介绍了ava中将数据转换为周月年数据,更加复杂的数据转换并没有涉及。如果你感觉有用请点赞,如果感觉不错请收藏,如果有什么错误请在下方评论指正。我是老白,我们下期再见。
网友评论