如何有效地获取每个http状态代码的计数?

时间:2014-09-10 21:50:21

标签: java algorithm http-status-codes resttemplate

我正在使用RestTemplate来执行URL,然后我打印出它的http状态代码。

ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, null, String.class);
System.out.println(response.getStatusCode());

现在我需要做的是,我需要获取每个状态代码的计数并将其作为键和值存储在map中。意思是,每个状态代码的次数。如果http 200状态代码大约100次,那么我想看看它的计数。

我可以通过为每个状态代码设置多个临时变量并继续相应地增加计数来实现。但除此之外还有其他简单的方法吗?

4 个答案:

答案 0 :(得分:1)

可能使用Map? 状态为键,值为计数器。

Map<String,Integer> counters = new HashMap<>();
...
synchronized (counters) {

  String code = response.getStatusCode();
  Integer counter = counters.get(code);

  if (counter == null) {
    counters.put(code, 1);
  } else {
    counters.put(code, counter + 1)
  }
}

答案 1 :(得分:0)

Map<Integer,Integer> statusMap = new HashMap<Integer,Integer>();

public void store(int code)
{
    if (statusMap.containsKey(code))
    {
        int value = statusMap.get(code);
        statusMap.put(code,value+1);
    }
    else
    {
        statusMap.put(code,1);      
    }
}

public void list()
{
    Iterator<Integer> iter = statusMap.keySet().iterator();
    while(iter.hasNext())
    {
        int code = iter.next();
        System.out.println(code + " : " + statusMap.get(code));
    }
}

答案 2 :(得分:0)

使用HashMap,然后:

  • 如果你的httpcode不在地图中,请插入count = 1。
  • 如果您的httpcode已经存在于地图中,那么请增加其计数器

    HashMap<Integer, Integer> mapCount = new HashMap<Integer, Integer>();
    
    // ...
    
    void updateMap(Integer httpCode) {
        if (!mapCount.containsKey(httpCode)) {
            mapCount.put(httpCode, 1);
        } else {
            // update counter
            int counter = mapCount.get(str).intValue() + 1;
            // overwrite existing with update counter
            mapCount.put(httpCode, counter + 1);
        }
    }
    
    // ...
    

答案 3 :(得分:0)

由于你实际上是在寻求另一种方式,你可以使用一个int数组,其中int数组的索引代表收到的HTTP代码。

类似的东西:

// initialization
int[] responses = new int[600];

// for each received response
responses[response.getStatusCode().value()]++

// retrieving the number of HTTP 200 received
System.out.println("Number of HTTP 200 received : " + responses[HttpStatus.OK.value()] /* or simply responses[200] */);

不确定这会给桌子带来什么:即使它更快一些,但在该阵列中肯定有大量的内容会最终浪费掉。其他答案详细介绍了Map方法,这是更好的imho,因为更明确地说明了你要做什么(即计算特定HTTP状态代码的出现次数)。在编写代码时,清晰度是关键:)