使用java从时间戳计算每秒事务数

时间:2015-11-02 12:41:08

标签: java

我有一个充满时间戳(最高为毫秒)的arraylist

2015/11/01 12.12.12.990
2015/11/01 12.12.12.992
2015/11/01 12.12.12.999

2015/11/01 12.12.15.135
2015/11/01 12.12.15.995

2015/11/01 12.12.20.135
2015/11/01 12.12.20.200
2015/11/01 12.12.20.300
2015/11/01 12.12.20.900

每个时间戳都是一个事务,我需要计算tps。 我如何获得列表列表,最终它将是这样的

2015/11/01 12.12.12, 3
2015/11/01 12.12.12, 2
2015/11/01 12.12.20, 4

其中,第一个是在第二级发生一秒钟的时间戳 和3,2,4等是tps?

2 个答案:

答案 0 :(得分:1)

创建一个类似于:

的类
public class TransactionsPerSecond {
    long time;
    int transactions=1; //Start at 1 to count the initial one
}

循环传入数据。如果时间与当前的TransactionsPerSecond对象不匹配,则创建一个新对象,否则将1添加到当前的事务计数中。

// For you to do, create results arraylist.

TransactionsPerSecond current = null;

for (String str: inputData) {

   // for you to do - parse str into a Date d.
   Date d = ???;

   if (current == null || d.getTime() != current.time) {
      current = new TransactionsPerSecond();
      current.time = d.getTime();
      results.add(current);
   } else {
      current.transactions++;
   }
}

答案 1 :(得分:1)

您必须使用一个ArrayList来包含所有时间戳和一个新的HashMap,其中String作为键,Integer作为String包含时间戳和{的值{1}}是一个计数器。像这样;

Integer

然后,在将先前的值与HashMap<String, Integer> hash = new HashMap<>(); 的当前值进行比较后,您必须使用for循环在hashmap中插入时间戳和计数值,如下所示:

ArrayList

然后,hashmap中的键值就是结果。 代码是:

if(i>0 && al.get(i).substring(0, 19).equalsIgnoreCase(al.get(i-1).substring(0, 19)))
hash.put(al.get(i).substring(0, 19),count);