解決統計出現次數問題的方法類

本人在測試抽獎活動的過程當中,遇到一個需求,須要統計每一次抽獎結果,而後跟預期值比較。一開始的思路是沒遇到一次而後設立一個int 類型的參數,而後遇到了就++一次就好了,可是狀況比較多,用 switch-case 來作比較麻煩,須要寫很長的代碼,聯想到以前面試也遇到過相似的問題,因此特地寫了一個方法來作這個事情。思路是利用 jsonobject 類的 containKey 方法來實現的。若是存在就 value 值加一,若是不存在就 put 到 jsonobject 裏面。下面是代碼,供各位參考。java

package com.fun.utils

import com.fun.frame.SourceCode
import net.sf.json.JSONObject

import java.util.stream.Collectors

/**
 * 統計出現次數相關類
 */
class CountTool extends SourceCode {
    /**
     * 統計數據出現的次數
     *
     * @param counts 統計的 jsonobject 對象
     * @param object 須要統計的數據
     */
    static def count(JSONObject counts, Object object) {
        count(counts, object, 1)
    }

    /**
     * 統計數據出現的次數
     *
     * @param counts 統計的 jsonobject 對象
     * @param object 須要統計的數據
     * @param num 默認值
     */
    static def count(JSONObject counts, Object object, int num) {
        counts.put(object, Integer.valueOf(counts.getOrDefault(object.toString(), num)))
    }

/**
 * 統計某個list裏面某個元素出現的次數
 * @param list
 * @param str
 * @return
 */
    static def count(List list, def str) {
        list.count { s -> s.toString().equals(str.toString()) }
    }

/**
 * 統計某個list裏面各個元素出現的次數
 * collect,是一個map<object,list>對象
 * @param list
 * @return
 */
    static def count(List list) {
        def collect = list.stream().collect(Collectors.groupingBy { x -> x.toString() })
        collect.keySet().stream().sorted().forEach { x ->
            output("元素:${x},次數:${collect.get(x).size()}")
        }
    }
}

中間用到了 tostring 方法,也就是隻能針對基礎變量類型和 string,其餘的 tostring 出來多是 hash 值,使用還須要分狀況,能夠重載一下。面試

往期文章精選

  1. java一行代碼打印心形
  2. Linux性能監控軟件netdata中文漢化版
  3. 接口測試代碼覆蓋率(jacoco)方案分享
  4. 性能測試框架
  5. 如何在Linux命令行界面愉快進行性能測試
  6. 圖解HTTP腦圖
  7. 寫給全部人的編程思惟
  8. 將json數據格式化輸出到控制檯
  9. 如何測試機率型業務接口
  10. 將swagger文檔自動變成測試代碼
  11. Mac+httpclient高併發配置實例
  12. httpclient處理多用戶同時在線

公衆號地圖 ☢️ 一塊兒來~FunTester

相關文章
相關標籤/搜索