App版本升级案例

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

二.代码实现:
package app_demo;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

import org.apache.commons.dbutils.QueryRunner;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class ReadApp {

public static void main(String[] args) throws Exception {
    sendDataToMysql();
    System.out.println("数据上传到Mysql成功 ...");
}

/** 使用Peoperties类来加载路径,增强代码的复用性 */
static String srcPath;
static {
    try {
        Properties p = new Properties();
        p.load(ReadApp.class.getClassLoader().getResourceAsStream("db.properties"));
        srcPath = p.getProperty("srcPath");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/** 上传数据到Mysql */
public static void sendDataToMysql() throws SQLException {
    List<AppBean> list = getAppBeanList();
    // 将数据上传到数据库
    ComboPooledDataSource dataSource = new ComboPooledDataSource();
    QueryRunner runner = new QueryRunner(dataSource);

    // 用二维数组缓存要发送的数据
    String sql = "insert into app values(?,?,?,?,?,?)";
    Object[][] params = new Object[list.size()][];
    for (int i = 0; i < list.size(); i++) {
        AppBean bean = list.get(i);
        params[i] = new Object[] { bean.getDate(), bean.getUserName(), bean.getAppName(), bean.getSource(),
                bean.getMinVersion(), bean.getMaxVersion() };
    }
    // 批量上传到Mysql
    runner.batch(sql, params);
}

/** 获取排好序的List<AppBean> */
public static List<AppBean> getAppBeanList() {
    Map<String, Set<String>> map = getAppVersion(srcPath);

    List<AppBean> resLsit = new ArrayList<>();
    /** 排序 */
    Set<Entry<String, Set<String>>> entrySet = map.entrySet();
    for (Entry<String, Set<String>> entry : entrySet) {
        String key = entry.getKey();
        Set<String> value = entry.getValue();

        if (value.size() > 1) {//版本数量有两个及以上才排序
            List<String> list = new ArrayList<>(value);
            //降序排列
            Collections.sort(list, (o1, o2) -> o2.compareTo(o1));
            // 封装数据
            String[] split = key.split(",");
            String date = split[0];
            String userName = split[1];
            String appName = split[2];
            String source = split[3];
            String maxVersion = list.get(0);
            String minVersion = list.get(list.size() - 1);

            AppBean bean = new AppBean(date, userName, appName, source, minVersion, maxVersion);
            resLsit.add(bean);
        }
    }
    return resLsit;
}

/** 获取appVresion,Set可以自动去重 */
public static Map<String, Set<String>> getAppVersion(String srcPath) {

    Map<String, Set<String>> map = new HashMap<>();
    try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(srcPath), "UTF-8"));) {
        br.readLine();// 过滤第一条数据
        String line;
        while ((line = br.readLine()) != null) {
            // 获取字段,拼接字符串,并将其视为 key
            String[] fields = line.split(",");
            String date = fields[0];
            String userName = fields[1];
            String appName = fields[2];
            String source = fields[3];
            String appVersion = fields[5];

            String key = date + "," + userName + "," + appName + "," + source;

            Set<String> set = map.getOrDefault(key, new HashSet<>());
            set.add(appVersion);
            map.put(key, set);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return map;
}

}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值