java取某段/某个时间段的值的方法

网友投稿 300 2022-11-13


java取某段/某个时间段的值的方法

直接上代码

测试类

public class TestData {

public static void main(String[] args) {

List 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 doCalculateActionTime(List tsData, String action) {

//step1:按照两位一个分解动作代码

//step2:找到动作代码总包含action代码的时间,找到第一次出现的时间和最后一次出现的时间

List 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 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 getStrList(String inputString, int length, int size) {

List list = new ArrayList();

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 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 doCalculateActionTime(List tsData, String action) {

//step1:按照两位一个分解动作代码

//step2:找到动作代码总包含action代码的时间,找到第一次出现的时间和最后一次出现的时间

List 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(Collectorshttp://.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 actions = ProjectStringUtil.getStrList(data.getValue(), 2);

//第一次出现,则记录时间,最后一次出现也记录时间

if (NWUQktskactions.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;

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解SpringBoot配置文件启动时动态配置参数方法
下一篇:聊一聊带智能提示的spring
相关文章

 发表评论

暂时没有评论,来抢沙发吧~