版本号比较_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 版本号比较

版本号比较

 2014/12/10 0:52:11  lv_max  程序员俱乐部  我要评论(0)
  • 摘要:最近公司项目上遇到一个BUG,导出应用版本信息报表获取最新版本时出了问题,发现1.10.0.0和1.5.0.0比较如果在sql中max()比较的话是后者大,所以最后只能把数据取出来。本来是简单的,但是受到其他代码的影响,处理之前和之后数据类型不能改变(List<Map<String,Object>>)思路如下:某个设备的的不同用户可以下载安装不同版本的同一个应用,所以要获取这个设备上某个应用的最新版本,首先要把该设备上的这个应用的各版本信息存放到一个List中
  • 标签:版本
    最近公司项目上遇到一个BUG,导出应用版本信息报表获取最新版本时出了问题,发现1.10.0.0和1.5.0.0比较如果在sql中max()比较的话是后者大,所以最后只能把数据取出来。本来是简单的,但是受到其他代码的影响,处理之前和之后数据类型不能改变(List<Map<String, Object>>)

思路如下:
    某个设备的的不同用户可以下载安装不同版本的同一个应用,所以要获取这个设备上某个应用的最新版本,首先要把该设备上的这个应用的各版本信息存放到一个List中,把这个设备的唯一标识ID作为key,最后通过迭代key获取List中各版本的信息,对版本好进行比较。

代码如下:
class="java">
  public List<Map<String,Object>> findAppMaxVersion(List<Map<String,   public List<Map<String,Object>> findAppMaxVersion(List<Map<String, Object>> applist) {

        Map<String, List<Map<String, Object>>> appMap = new HashMap<String, List<Map<String, Object>>>();
        List<Map<String, Object>> tmpApps = null;
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
       /*将list转换成map*/
        for (Map<String, Object> map:applist) {
            String id = String.valueOf(map.get("ID"));
            if (appMap.containsKey(id)) {
                tmpApps = appMap.get(id);
                tmpApps.add(map);
            } else {
                tmpApps = new ArrayList<Map<String,Object>>();
                tmpApps.add(map);
                appMap.put(String.valueOf(id), tmpApps);
            }
           
        }

        if (appMap == null || appMap.isEmpty()) {
            return null;
        }
       /*对同一key中List存放的不同版本的版本号进行比较*/
        for (String key : appMap.keySet()) {
            List<Map<String, Object>> matchedList = appMap.get(key);
            Map<String,Object> map = new HashMap<String, Object>();
            if (matchedList.isEmpty()) {
                continue;
            }
           
            map = matchedList.get(0);
           
            if (matchedList.size() > 1) {
                for (int i = 0; i < matchedList.size() - 1; i++) {
                      if (CommonUtils.MaxVersion(map.get("APPVERSION").toString(),
                                matchedList.get(i + 1).get("APPVERSION").toString())<0) {
                            map = matchedList.get(i + 1);
                      }
                }
            }
            list.add(map);
        }
        return list;
    }

}


其中MaxVersion()方法是获取最新版本的方法,代码如下:
    public static int  MaxVersion(String version1, String version2){
        String  v1[]=version1.split("\\.");    
        String  v2[]=version2.split("\\.");
        for(int i=0, j=0;i<v1.length && j<v2.length; i++,j++){
            if(v1[i].length()==v2[j].length()){
                if(v1[i].compareTo(v2[j])!=0){
                    return v1[i].compareTo(v2[j]);
                }
            }else {
                return v1[i].length()-v2[j].length();            
             }        
        }              
          return 0;      
    }


总结:
     本次主要涉及到了list转换成map和序列号的比较,序列号的比较比较简单,关于list转换出map这里提供三种方法
http://jackyrong.iteye.com/blog/2158009
上一篇: 学习Spring必学的Java基础知识(4)—XML基础知识 下一篇: 没有下一篇了!
发表评论
用户名: 匿名