一个项目中偶遇的简单算法,个人觉得还不错,虽不常用,也记录在此吧。
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 }