从一组集合中获取,分多次取集合中的每段数据中的最大值,重组成一个新的集合。

一个项目中偶遇的简单算法,个人觉得还不错,虽不常用,也记录在此吧。

  1 package huolongluo.byw.util;
  2 
  3 import android.util.Log;
  4 
  5 import java.util.ArrayList;
  6 import java.util.Collections;
  7 import java.util.List;
  8 
  9 /**
 10  * Created by 火龙裸先生 on 2017/11/13.
 11  */
 12 
 13 public class ListUtils
 14 {
 15     private static final String TAG = "ListUtils";
 16 
 17     /**
 18      * 从一个集合里面,从0位置开始,
 19      * 每次从集合截取指定长度的一段集合,取出其中的最大值。
 20      * 最终把每次拿到的最大值,形成一个新的集合作为返回值。
 21      *
 22      * @param oldList 待处理的集合
 23      * @param space   每次从老集合中取多少个值进行比较
 24      */
 25     public static List<Float> getNewList(List<Float> oldList, int space)
 26     {
 27         Log.e(TAG, "===============数据源==============" + oldList);
 28 
 29         List<Float> last = new ArrayList<>(); // 数据源末尾多出来的几个数
 30 
 31         int index = 0;
 32         for (int i = 0; i < oldList.size(); i++)
 33         {
 34             if (index + space < oldList.size())
 35             {
 36                 Log.e(TAG, "==========截取到的是======" + oldList.subList(index, index + space));
 37                 last.add(Collections.max(oldList.subList(index, index + space)));
 38             }
 39             else
 40             {
 41                 if (index < oldList.size())
 42                 {
 43                     last.add(Collections.max(oldList.subList(index, oldList.size())));
 44                     Log.e(TAG, "********末尾集合********" + oldList.subList(index, oldList.size()));
 45                 }
 46             }
 47             index = index + space;
 48         }
 49         Log.e(TAG, "=================最终结果=============" + last);
 50         Log.e(TAG, "=================最终结果===条数==========" + last.size());
 51 
 52         return last;
 53     }
 54 
 55     /**
 56      * 从一个集合里面,从0位置开始,
 57      * 每次从集合截取指定长度space的一段集合,取这段集合之和的平均值。
 58      * 最终把每次拿到的平均值,形成一个新的集合作为返回值。
 59      *
 60      * @param oldList 待处理的集合
 61      * @param space   每次从老集合中取多少个值进行求和后求平均数
 62      */
 63     public static List<Float> getNewListCenter(List<Float> oldList, int space)
 64     {
 65         Log.e(TAG, "===============数据源==============" + oldList);
 66 
 67         List<Float> last = new ArrayList<>(); // 数据源末尾多出来的几个数
 68 
 69         int index = 0;
 70         for (int i = 0; i < oldList.size(); i++)
 71         {
 72             if (index + space < oldList.size())
 73             {
 74                 float sum = 0;
 75                 Log.e(TAG, "==========截取到的是======" + oldList.subList(index, index + space));
 76                 List<Float> cutOutList = new ArrayList<>();
 77                 cutOutList.addAll(oldList.subList(index, index + space));
 78                 for (int j = 0; j < cutOutList.size(); j++)
 79                 {
 80                     sum += cutOutList.get(j);
 81                 }
 82                 last.add(sum / cutOutList.size());
 83             }
 84             else
 85             {
 86                 if (index < oldList.size())
 87                 {
 88                     float sum = 0;
 89                     List<Float> endList = new ArrayList<>();
 90                     endList.addAll(oldList.subList(index, oldList.size()));
 91                     for (int j = 0; j < endList.size(); j++)
 92                     {
 93                         sum += endList.get(j);
 94                     }
 95                     last.add(sum / endList.size());
 96                     Log.e(TAG, "********末尾集合********" + oldList.subList(index, oldList.size()));
 97                 }
 98             }
 99             index = index + space;
100         }
101         Log.e(TAG, "=================最终结果=============" + last);
102         Log.e(TAG, "=================最终结果===条数==========" + last.size());
103 
104         return last;
105     }
106 }

 

posted @ 2017-12-02 10:36  火龙裸先生  阅读(1093)  评论(0编辑  收藏  举报