亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果時間跨度重疊且少于 30 分鐘,則對日志條目進行分組?

如果時間跨度重疊且少于 30 分鐘,則對日志條目進行分組?

慕斯709654 2022-06-15 10:41:44
我有以下列格式存在的單個用戶的日志條目:[unique id], [start time],[ end time]因此,在以下示例條目中:1,1100,12002,1030,11303,1420,15004,1519,1700查找會話,即將日志條目分組為“會話”。確定會話的條件是:如果兩個條目時間跨度重疊,則它們屬于同一會話。或者如果不重疊,但在 < 30 之間的差距,那么它們屬于同一個會話。示例:輸出應如下所示:Session 1: 1, 2Session 2: 3, 4我在想的邏輯是:解析字符串并將其加載到“LogEntries”類中。根據“startTime”對“條目”集合進行排序。我有“LogEntries”類實現了“Comparable”接口?,F在迭代“條目”集合并獲得所需的輸出。輸出將是一個字符串列表,其中每個字符串將用逗號分隔。我想出了下面的代碼,但我對如何處理上面的第 3 點邏輯感到困惑。  private static List<String> groupSessions(List<String> inputs) {    List<String> output = new ArrayList<>();    List<LogEntries> entries = new ArrayList<>();    for (String input : inputs) {      String[] arr = input.split(",");      LogEntries entry =          new LogEntries(Integer.parseInt(arr[0]), Integer.parseInt(arr[1]),              Integer.parseInt(arr[2]));      entries.add(entry);    }    // sort it basis on startTime    Collections.sort(entries);    // now iterate the entries list - this is where I am confuse    for (int i = 0; i < entries.size(); i++) {      // do some stuff    }    return output;  }
查看完整描述

1 回答

?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

一些想法:

  • 您將時間戳表示為 int/Integer 值。這允許簡單的排序,但會使以后的計算變得更加困難(比如更難獲得兩個時間戳之間的增量)。您可以考慮創建一個不同的類來表示這些小時:分鐘值。

  • 解決你的任務:首先在一張紙上做。以您的輸入示例為例,首先根據開始時間對該列表進行排序。

  • 查看排序的時間戳,查看第一個條目。顯然,這必須是會話的開始?,F在您只需查看第一個條目的結束時間和后續條目的開始時間。重疊?然后第一個會話繼續到第二個條目的結束時間。沒有重疊,然后您計算“開始時間(秒) - 首先結束時間”。小于30分鐘?會話繼續,因此您再次與下一個結束時間進行比較。否則,會話結束,下一個條目是下一個會話的開始。重復。

長話短說:您必須首先開發告訴您如何確定會話的算法。然后,您將該指令序列轉換為代碼。關鍵是首先從概念上將大問題分解成最小的部分,然后看看如何將它們組合在一起。


查看完整回答
反對 回復 2022-06-15
  • 1 回答
  • 0 關注
  • 97 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號