zoukankan      html  css  js  c++  java
  • 从一组集合中获取,分多次取集合中的每段数据中的最大值,重组成一个新的集合。

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

      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 }
  • 相关阅读:
    View基础知识
    数据库性能优化之SQL优化
    poi读取Excel文件和图片
    ab压测工具的一些个人见解
    【压测工具对比系列施压对比】
    【压测工具对比系列性能对比】
    【转】linux sed命令详解
    linux下文件比对功能
    windows下自动更改IP的小工具(bat批处理文件)
    mysql中操作符LIKE与通配符%的使用
  • 原文地址:https://www.cnblogs.com/huolongluo/p/7953573.html
Copyright © 2011-2022 走看看