`

版本号比较

阅读更多
    最近公司项目上遇到一个BUG,导出应用版本信息报表获取最新版本时出了问题,发现1.10.0.0和1.5.0.0比较如果在sql中max()比较的话是后者大,所以最后只能把数据取出来。本来是简单的,但是受到其他代码的影响,处理之前和之后数据类型不能改变(List<Map<String, Object>>)

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

代码如下:
  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
0
0
分享到:
评论

相关推荐

    比较版本号算法

    比较版本号算法,适用于大多数版本号比较。比较实用的一个工具类

    版本号(多个小数点数字)高低对比

    标题中的“版本号(多个小数点数字)高低对比”是指在软件开发中常见的版本号比较问题。在IT行业中,版本号通常用于标识软件的不同迭代阶段,它由一系列的数字和点组成,如1.0.0、1.2.3等。在处理这些版本号时,我们...

    在系统中需要版本管理时,比较系统或系统文件版本号的大小的通用函数,java实现

    在系统中需要版本管理时,比较系统或系统文件版本号的大小的通用函数,java实现。比如从以下数组中找出版本号最大的: public static void main(String[] args) { String[] versions = new String[]{"17.2.3", ...

    java代码-版本号比较

    在Java编程中,版本号比较是一项常见的任务,特别是在软件开发和依赖管理中。这个主题主要涉及到如何使用Java代码处理字符串形式的版本号,并进行有效的比较。以下是对这一知识点的详细阐述。 首先,版本号通常由一...

    versioning:语义版本号比较

    版本号 (version number)语义化版本号比较模块。语义化版本号通常定义如下:Major_Version_Number.Minor_Version_Number[.Revision_Number[.Build_Number]]主版本号 .子版本号 [.修正版本号 [.编译版本号 ]]使用var ...

    动态链接库dll版本信息提取与对比

    3. **比较版本号**:比较版本号通常涉及将字符串形式的版本号转换为整数数组,例如,"1.2.3.4"转换为[1, 2, 3, 4]。然后,逐元素比较数组,直到找到不相等的元素,或者所有元素都相等,表明版本相同或不同。 4. **...

    Java实现比较版本号

    涉及到客户端的系统中经常需要用到比较版本号的功能,但是比较版本号又不能完全按照字符串比较的方式去用compareTo之类的方法;  这需要我们总结版本号的通用规则,设计一个比较算法并封装成通用方法来使用:  ...

    Java版本比较工具类

    因此,一个能够高效准确地进行版本号比较的工具类就显得尤为重要。 #### 二、核心功能介绍 在给定的代码示例中,`NumUtils` 类提供了 `compareVersion` 方法用于实现版本号的比较功能。该方法接收两个字符串参数 `...

    比较版本号的大小的通用函数

    比较版本号的大小的通用函数,java实现。支持包涵字符串型版本号

    nsis脚本中的版本检测函数

    在nsis打包脚本中使用的版本信息检测函数,简单,实用

    java 实现比较版本号功能

    在Java编程中,比较版本号是一项常见的任务,特别是在处理客户端软件更新或依赖管理时。版本号通常由一系列数字和(可选的)字母组成,例如`1.3.20.8`或`6.82.20160101`,甚至包含字母后缀如`8.5c`。直接使用字符串...

    获取exe和dll文件的版本号

    你可以根据实际需要调整或扩展这个功能,例如记录到日志文件、比较版本号或触发其他操作。 通过这样的程序,你的朋友就能有效地管理和监控他所测试的软件组件的版本情况,确保使用的都是最新的或兼容的版本。同时,...

    获得软件版本号类

    - `compareTo()`: 比较两个版本号的大小。 - `increment()`: 更新版本号(如增加修订号)。 4. **文件版本信息** 在Windows系统中,每个可执行文件或动态链接库(DLL)都有一个文件版本信息,可以通过`...

    Python实现 版本号对比功能的实例代码

    3. **版本号比较**:比较两个版本号并确定其相对大小。 接下来,我们将详细介绍如何通过Python实现以上功能。 #### 三、实现细节 ##### 1. 版本号格式验证 为了确保输入的版本号格式正确,我们采用正则表达式来...

    语义化版本号-中文版

    这部分信息主要用于区分同一版本的不同构建,但不影响版本号的比较。例如 `1.0.0-alpha+001`。 #### 5. 规范的重要性 在软件开发过程中,版本控制是一项至关重要的任务。随着软件系统的日益复杂,依赖管理成为一大...

    Android-轻量级Android库用来比较版本字符串

    在实际应用中,这个库可以帮助开发者轻松地进行版本号比较,例如: ```java Version version1 = new Version("1.2.3"); Version version2 = new Version("1.2.4"); if (version1.compare(version2) ) { // 版本1...

    C#目录中文件对比工具源码

    4. **文件版本号对比**:对于具有版本信息的文件(如DLL或EXE),我们可以使用`FileVersionInfo`类获取文件的版本号。这需要比较`FileVersionInfo.FileMajorPart`、`FileVersionInfo.FileMinorPart`、`...

    chrome 版本号49

    chrome 49版本号 比较老的chrome版本,使用与一些测试人员的研究

Global site tag (gtag.js) - Google Analytics