溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用java如何獲取指定時間段的值

發(fā)布時間:2020-11-16 15:54:30 來源:億速云 閱讀:346 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章為大家展示了使用java如何獲取指定時間段的值,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

直接上代碼

測試類

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代碼的時間,找到第一次出現(xiàn)的時間和最后一次出現(xiàn)的時間
    List<ActionTime> actionTime = new ArrayList<>();
    if (CollectionUtils.isEmpty(tsData)) {
      return actionTime;
    }
    //是不是第一次出現(xiàn)
    boolean isFirst = true;
    //是不是已經(jīng)出現(xiàn)過
    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");

      //第一次出現(xiàn),則記錄時間,最后一次出現(xiàn)也記錄時間
      if (actions.contains(action)) {
        if (isFirst) {
          //記錄開始時間
          record = new ActionTime();
          record.setStartTime(data.getTimestamp());
          //設(shè)置標(biāo)志位
          isFirst = false;
          isAppear = true;
        }

      } else {
        //判斷前面是否已經(jīng)出現(xiàn)過action
        if (isAppear) {
          //記錄結(jié)束時間
          record.setEndTime(data.getTimestamp());
          actionTime.add(record);
          //重置標(biāo)志位
          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  結(jié)束位置
   */
  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代碼的時間,找到第一次出現(xiàn)的時間和最后一次出現(xiàn)的時間
    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());
    //是不是第一次出現(xiàn)
    boolean isFirst = true;
    //是不是已經(jīng)出現(xiàn)過
    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);
      //第一次出現(xiàn),則記錄時間,最后一次出現(xiàn)也記錄時間
      if (actions.contains(action)) {
        if (isFirst) {
          //記錄開始時間
          record = new ActionTime();
          record.setStartTime(data.getTimestamp());
          //設(shè)置標(biāo)志位
          isFirst = false;
          isAppear = true;
        }

      } else {
        //判斷前面是否已經(jīng)出現(xiàn)過action
        if (isAppear) {
          //記錄結(jié)束時間
          record.setEndTime(data.getTimestamp());
          actionTime.add(record);
          //重置標(biāo)志位
          isAppear = false;
          isFirst = true;
        }

      }

    }
    return actionTime;
  }

上述內(nèi)容就是使用java如何獲取指定時間段的值,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI