1. 程式人生 > >利用java統計每天使用者升級手機App資訊

利用java統計每天使用者升級手機App資訊

利用java幾個簡單的工具來統計每天使用者升級手機App資訊, 先看資料和需求:

日期,使用者名稱,app名,下載渠道,所在城市,app版本
2017-08-15,金剛葫蘆娃,美團外賣,app store,上海,v2.9
2017-08-15,金剛葫蘆娃,脈脈,app store,上海,v2.3
2017-08-15,金剛葫蘆娃,美團外賣,app store,上海,v2.6
2017-08-15,金剛葫蘆娃,美團外賣,app store,上海,v2.7
2017-08-15,金剛葫蘆娃,脈脈,app store,北京,v2.3
2017-08-16,金剛葫蘆娃,美團外賣,app store,北京,v2.8
2017-08-14,三毛,子彈短息,360應用,北京,v2.0
2017-08-15,哪吒,子彈短息,安智市場,北京,v1.2
2017-08-15,哪吒,子彈短息,安智市場,北京,v1.5
2017-08-15,三毛,子彈短息,360應用,北京,v1.0
2017-08-15,三毛,子彈短息,360應用,北京,v2.1
2017-08-14,三毛,子彈短息,360應用,北京,v1.0
2017-08-14,哪吒,子彈短息,安智市場,北京,v1.2
2017-08-14,三毛,子彈短息,360應用,天津,v1.2
2017-08-14,三毛,子彈短息,小米應用,天津,v2.0
2016-08-14,金剛葫蘆娃,美拍,app store,上海,v1.8
2016-08-14,金剛葫蘆娃,美拍,app store,上海,v1.2
2016-08-14,金剛葫蘆娃,美拍,安智市場,上海,v1.2

需求 統計出每天的app版本升級情況

按照 日期 使用者名稱 app名 新版本下載渠道 升級前版本 升級後版本 進行排列
呈現效果如下:

2016-8-14 金剛葫蘆娃 美拍 app store v1.2 v1.8
2016-8-14 金剛葫蘆娃 美拍 安智市場 v1.2
2017-8-14 三毛 子彈短息 360應用 v1.0 v1.2 v2.0
2017-8-14 三毛 子彈短息 小米應用 v2.0

分析步驟

  1. 利用Map< String, List< String > > 儲存
    * k值 : 日期,使用者名稱,app名,新版本下載渠道.toString
    *
    value值: app版本
  2. 對Map中的value進行排序(List.sort(new Comparator< String > (){ })
  3. 以TreeMap進行儲存, 可實現對k進行自動排序
建立一個AppBean 類
public class AppBean {
    private String date;
    private String userName;
    private String appName;
    private String downLoadChannel;
    private String city;
    private
String appRelease; public AppBean(String date, String userName, String appName, String downLoadChannel) { super(); this.date = date; this.userName = userName; this.appName = appName; this.downLoadChannel = downLoadChannel; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getAppName() { return appName; } public void setAppName(String appName) { this.appName = appName; } public String getDownLoadChannel() { return downLoadChannel; } public void setDownLoadChannel(String downLoadChannel) { this.downLoadChannel = downLoadChannel; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getAppRelease() { return appRelease; } public void setAppRelease(String appRelease) { this.appRelease = appRelease; } public String getData() { return date + "," + userName + "," + appName + "," + downLoadChannel ; } @Override public String toString() { return "AppBean [date=" + date + ", userName=" + userName + ", appName=" + appName + ", downLoadChannel=" + downLoadChannel + ", city=" + city + ", appRelease=" + appRelease + "]"; } }
讀取資料資訊, 並儲存到TreeMap中
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class ReadFile {

    public static Map<String, List<String>> getInfoMap(String path) throws Exception {
        Map<String, List<String>> map = new TreeMap<>();

        BufferedReader br = new BufferedReader(new FileReader(path));
        String line = null;
        while ((line = br.readLine()) != null) {
            String[] split = line.split(",");
            String date = split[0];
            String userName = split[1];
            String appName = split[2];
            String downLoadChannel = split[3];
            String city = split[4];
            String appRelease = split[5];

            AppBean appBean = new AppBean(date, userName, appName, downLoadChannel);


            /**獲得key 和 版本  value */
            List appv = map.getOrDefault(appBean.toString(), new ArrayList());
            appv.add(appRelease);
            map.put(appBean.toString(), appv);

        }
        return map;
    }

}

對TreeMap 中 List排序 , 產生 版本號升序效果

mport java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

public class CompareInfo {
    public static void main(String[] args) throws Exception {
        /**依據 版本的List長度篩選發生改變的 資訊*/
        Map<String,List<String>> newMap = new TreeMap<>();

        Map<String, List<String>> infoMap = ReadFile
                .getInfoMap("檔案所在目錄");

        Set<Entry<String, List<String>>> entrySet3 = infoMap.entrySet();
        for (Entry<String, List<String>> entry : entrySet3) {
            List<String> value = entry.getValue();
            value.sort(new Comparator<String>() {

                @Override
                public int compare(String o1, String o2) {
                    // TODO Auto-generated method stub
                    return o1.compareTo(o2);
                }
            });

        }
        Set<Entry<String, List<String>>> entrySet2 = infoMap.entrySet();
        for (Entry<String, List<String>> entry : entrySet2) {

            System.out.println(entry);
        }
    }
}

大家可以考慮如何充分利用appBean , 能夠實現依據使用者名稱, 地點, 或者應用市場進行篩選選, 而不是採用上述單一的步驟. 實現思想和上述略有不同.