栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 {
  

  
  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;
  }

  
  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(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 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取某段/某个时间段值内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/130522.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号