feiyu02
2021-12-02 74ffc8ebf3a25d2e3cee758954ce6efc163cb864
src/main/kotlin/com/flightfeather/uav/dataprocess/AverageUtil.kt
@@ -2,35 +2,35 @@
/**
 * 均值计算工具,将一组连续数据转换为自定义周期的均值数据
 * 要求传入的数据按照时间顺序排列,
 * 要求传入的数据按照时间顺序正序排列,
 * @param onTag 定义数据标签获取回调函数,当当前数据标签与上个数据标签不同时,即认为上一组数据为同一组数据,需求出均值
 * @param onAvg 定义均值计算方法
 */
class AverageUtil<T : Any>(var onTag: (d: T) -> String, var onAvg: (list: List<T>) -> T) {
class AverageUtil<T, K>(var onTag: (d: T) -> String, var onAvg: (list: List<T>) -> K) {
    // 缓存最新的tag
    private var lastTag: String? = null
    // 临时数据缓存
    private val dataSet = mutableListOf<T>()
    // 转换结果
    private val result = mutableListOf<T>()
    private val result = mutableListOf<K>()
    /**
     * 将数据集转换为均值数据
     * @param list 原始数据
     * @return 均值数据
     */
    fun avg(list: List<T>): List<T> {
    fun avg(list: List<T>): List<K> {
        // 初始化所有变量
        clear()
        // 计算均值
        list.forEach {
            val tag = onTag(it)
            // 第一条数据和tag相同时,将数据放入临时缓存列表
            // 是第一条数据或tag相同时,将数据放入临时缓存列表
            if (lastTag == null || tag == lastTag) {
                dataSet.add(it)
            }
            // 当tag不同时,计算之前数据的均值,同时情况临时数据缓存,添加当前的新数据
            // 当tag不同时,计算之前数据的均值,同时清空临时数据缓存,添加当前的新数据
            else {
                result.add(onAvg(dataSet))
                dataSet.clear()