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

 更新时间:2020年11月12日 10:48:07   作者:taiguolaotu  
这篇文章主要介绍了java取某段/某个时间段的值的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

直接上代码

测试类

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

相关文章

  • java中HashMap的七种遍历方式小结

    java中HashMap的七种遍历方式小结

    本文主要介绍了java中HashMap的七种遍历方式小结,包括迭代器,For Each,Lambda,Streams API等,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Java集合功能与用法实例详解

    Java集合功能与用法实例详解

    这篇文章主要介绍了Java集合功能与用法,结合实例形式详细分析了java集合的基本概念、功能、原理、操作技巧与使用注意事项,需要的朋友可以参考下
    2020-04-04
  • JAVAEE中用Session简单实现购物车功能示例代码

    JAVAEE中用Session简单实现购物车功能示例代码

    本篇文章主要介绍了JAVAEE中用Session简单实现购物车功能示例代码,非常具有实用价值,需要的朋友可以参考下。
    2017-03-03
  • 泛型的类型擦除后fastjson反序列化时如何还原详解

    泛型的类型擦除后fastjson反序列化时如何还原详解

    这篇文章主要为大家介绍了泛型的类型擦除后fastjson反序列化时如何还原详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Java之常用类小结案例讲解

    Java之常用类小结案例讲解

    这篇文章主要介绍了Java之常用类小结案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Javas使用Redlock实现分布式锁过程解析

    Javas使用Redlock实现分布式锁过程解析

    这篇文章主要介绍了Javas使用Redlock实现分布式锁过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • springboot手动事务回滚的实现代码

    springboot手动事务回滚的实现代码

    这篇文章主要介绍了springboot手动事务回滚的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Spring如何基于xml实现声明式事务控制

    Spring如何基于xml实现声明式事务控制

    这篇文章主要介绍了Spring如何基于xml实现声明式事务控制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • java集合Collection实现类解析ArrayList LinkedList及Vector

    java集合Collection实现类解析ArrayList LinkedList及Vector

    这篇文章主要为大家介绍了java集合Collection实现类解析ArrayList LinkedList及Vector,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-03-03
  • Java开发学习 Eclipse项目有红感叹号解决之道

    Java开发学习 Eclipse项目有红感叹号解决之道

    这篇文章主要为大家详细介绍了完美解决Eclipse项目有红感叹号问题的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04

最新评论