java取某段/某个时间段的值的方法
#代码知识 发布时间: 2026-01-12
直接上代码

测试类
public class TestData {
public static void main(String[] args) {
List<TsData> list = new ArrayList<>();
list.add(new TsData("11","08",11111l));
list.add(new TsData("11","080405",22222l));
list.add(new TsData("11","09070802",33333l));
list.add(new TsData("11","09234567",44444l));
list.add(new TsData("11","9867342",55555l));
list.add(new TsData("11","08607342",55555l));
list.add(new TsData("11","08607342",555556l));
list.add(new TsData("11","dad8607342",5555567l));
System.out.println(doCalculateActionTime(list,"08")+" uiui");
}
public static List<ActionTime> doCalculateActionTime(List<TsData> tsData, String action) {
//step1:按照两位一个分解动作代码
//step2:找到动作代码总包含action代码的时间,找到第一次出现的时间和最后一次出现的时间
List<ActionTime> actionTime = new ArrayList<>();
if (CollectionUtils.isEmpty(tsData)) {
return actionTime;
}
//是不是第一次出现
boolean isFirst = true;
//是不是已经出现过
boolean isAppear = false;
ActionTime record = new ActionTime();
for (TsData data : tsData) {
if (null == data.getTimestamp() || StringUtils.isEmpty(data.getValue())) {
continue;
}
List<String> actions = ProjectStringUtil.getStrList(data.getValue(), 2);
System.out.println(actions+" actions");
//第一次出现,则记录时间,最后一次出现也记录时间
if (actions.contains(action)) {
if (isFirst) {
//记录开始时间
record = new ActionTime();
record.setStartTime(data.getTimestamp());
//设置标志位
isFirst = false;
isAppear = true;
}
} else {
//判断前面是否已经出现过action
if (isAppear) {
//记录结束时间
record.setEndTime(data.getTimestamp());
actionTime.add(record);
//重置标志位
isAppear = false;
isFirst = true;
}
}
}
return actionTime;
}
}
实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TsData {
private String label;
private String value;
private Long timestamp;
}
工具类
public class ProjectStringUtil {
/**
* 把原始字符串分割成指定长度的字符串列表
*
* @param inputString 原始字符串
* @param length 指定长度
* @return
*/
/**
* 把原始字符串分割成指定长度的字符串列表
*
* @param inputString 原始字符串
* @param length 指定长度
* @param size 指定列表大小
*/
public static List<String> getStrList(String inputString, int length, int size) {
List<String> list = new ArrayList<String>();
for (int index = 0; index < size; index++) {
String childStr = substring(inputString, index * length,
(index + 1) * length);
list.add(childStr);
}
return list;
}
/**
* 分割字符串,如果开始位置大于字符串长度,返回空
*
* @param str 原始字符串
* @param f 开始位置
* @param t 结束位置
*/
public static String substring(String str, int f, int t) {
if (f > str.length()) {
return null;
}
if (t > str.length()) {
return str.substring(f);
} else {
return str.substring(f, t);
}
}
public static List<String> getStrList(String inputString, int length) {
int size = inputString.length() / length;
if (inputString.length() % length != 0) {
size += 1;
}
return getStrList(inputString, length, size);
}
}
测试类改进
@Override
public List<ActionTime> doCalculateActionTime(List<TsData> tsData, String action) {
//step1:按照两位一个分解动作代码
//step2:找到动作代码总包含action代码的时间,找到第一次出现的时间和最后一次出现的时间
List<ActionTime> actionTime = new ArrayList<>();
if (CollectionUtils.isEmpty(tsData)) {
return actionTime;
}
//去重
tsData = tsData.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TsData::getTimestamp))),
ArrayList::new));
// 排序
tsData = tsData.stream().sorted(Comparator.comparing(TsData::getTimestamp)).collect(Collectors.toList());
//是不是第一次出现
boolean isFirst = true;
//是不是已经出现过
boolean isAppear = false;
ActionTime record = new ActionTime();
for (TsData data : tsData) {
if (null == data.getTimestamp() || StringUtils.isEmpty(data.getValue())) {
continue;
}
List<String> actions = ProjectStringUtil.getStrList(data.getValue(), 2);
//第一次出现,则记录时间,最后一次出现也记录时间
if (actions.contains(action)) {
if (isFirst) {
//记录开始时间
record = new ActionTime();
record.setStartTime(data.getTimestamp());
//设置标志位
isFirst = false;
isAppear = true;
}
} else {
//判断前面是否已经出现过action
if (isAppear) {
//记录结束时间
record.setEndTime(data.getTimestamp());
actionTime.add(record);
//重置标志位
isAppear = false;
isFirst = true;
}
}
}
return actionTime;
}
到此这篇关于java取某段/某个时间段的值的方法的文章就介绍到这了,更多相关java取某段/某个时间段值内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇 : Vue向后台传数组数据,springboot接收vue传的数组数据实例
下一篇 : ASP.NET Core3.1 Ocelot路由的实现
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!