本文最后更新于 429 天前,其中的信息可能已经有所发展或是发生改变。
站长在之前的工作中遇到了需要自己生成时间轴数据的场景,类似于下面这种:
{2020-08=0,
2020-09=0,
2020-10=0,
2020-11=0,
2020-12=0,
2021-01=0}
以往可能都是根据业务来进行一个一个的编写,这样多了之后就会造成大量类似的代码,所以站长做了一步抽象,做成一个通用的工具出来。
首先引入jar包,由于站长还没有发布到maven central上,所以这里暂时只能自己打包成jar,后面站长发布了就可以直接引用了。
站长的项目地址点击这里。
# 创建数据
List<Pojo> dataList = new ArrayList() {{
add(new Pojo() {{
setDate(new Date());
setValue("1");
}});
add(new Pojo() {{
setDate(Date.from(Instant.now().minusSeconds(3600 * 24 * 1)));
setValue("2");
}});
add(new Pojo() {{
setDate(Date.from(Instant.now().minusSeconds(3600 * 24 * 1)));
setValue("3");
}});
add(new Pojo() {{
setDate(Date.from(Instant.now().minusSeconds(3600 * 24 * 2)));
setValue("3");
}});
}};
# 通过构造器构造一个时间轴数据出来并存放在result中
Map<String, BigDecimal> result = new TimeLineData.Builder<Pojo>()
.dataList(dataList)
.k(it -> DateKit.getStr(LocalDateTime.ofInstant(it.getDate().toInstant(), ZoneId.systemDefault()), DateType.MONTH))
.v(it -> BigDecimal.valueOf(Double.parseDouble(it.getValue())))
.start(LocalDateTime.of(2020, 8, 1, 1, 1))
.end(LocalDateTime.of(2021, 8, 1, 1, 1))
.build()
.getData();
以上就是kotlin中生成时间轴数据的方式。