• APP版本更新中比较APP的版本号高低并返回最高版本


    背景

    App检查更新功能,每次进行功能迭代准备上线时,在后台配置一个新的版本号并上传最新的apk,然后在App点击检查更新时返回最新的版本号。

    版本号是非空字符串并且只包含数字和 . 字符。如1.2.33这个 '.' 字符不表示小数点,用于分隔数字序列。

    方案一

    对版本号进行两两比较,判断其大小,得出最高版本。

    版本号的特点,假设版本号段数不固定,可能是三段,也可能是四段。每一段的数字位数也不固定,总之从高位往低位判断,数字大的版本号大。

    package com.lingyejun.dating.chap11.toutiao;
    
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.List;
    import java.util.stream.Collectors;
    
    /**
     * @Author: lingyejun
     * @Date: 2022/5/1
     * @Describe:
     * @Modified By:
     */
    public class CompareVersionNumbers {
    
        public static int compareVersions(String version1, String version2) {
            String[] levels1 = version1.split("\\.");
            String[] levels2 = version2.split("\\.");
    
            int length = Math.max(levels1.length, levels2.length);
    
            for (int i = 0; i < length; i++) {
                Integer v1 = i < levels1.length ? Integer.parseInt(levels1[i]) : 0;
                Integer v2 = i < levels2.length ? Integer.parseInt(levels2[i]) : 0;
    
                // 对每一段的版本号从高位到低位进行判断
                int compare = v1.compareTo(v2);
    
                // 如果当前段版本号相同,则继续比较下一段,若当前段能判断出版本高低则直接返回
                if (compare != 0) {
                    return compare;
                }
            }
            return 0;
        }
    
        public static void main(String[] args) {
            String version1 = "1.23.789";
            String version2 = "1.33.6678";
    
            int compare = compareVersions(version1, version2);
    
            System.out.println(compare);
    
            String version3 = "11.1.2";
    
            List<String> versionList = Arrays.asList(version1, version3, version2);
    
            List<String> sortedVersionList = versionList.stream()
                    .sorted(CompareVersionNumbers::compareVersions)
                    .sorted(Comparator.reverseOrder())
                    .collect(Collectors.toList());
    
            System.out.println(sortedVersionList);
    
            String maxVersion = versionList.stream()
                    .sorted(CompareVersionNumbers::compareVersions)
                    .sorted(Comparator.reverseOrder())
                    .findFirst().orElse(null);
    
            System.out.println(maxVersion);
        }
    }

    方案二

    App在开发过程中会有自己的版本控制,每次打完包时会标注此包对外发布的版本号,还有一个版本编码(数字类型)随着版本号的增加此数字也是递增的。我们可以在后台维护的时候把版本号和版本编码都维护进去。我们在选取最高版本的时候,直接查数据库select max(version_numer)  from app_version;就可以直接得到最大的版本了。

    本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。

    首发链接:https://www.cnblogs.com/lingyejun/p/16212161.html

  • 相关阅读:
    centos7 mongodb3.4 安装
    centos7 开放端口号
    Junit4测试Spring
    selenium浏览器内核监测处理
    mitmproxy(TLS错误)
    爬虫计算两张验证图片的距离(情况一)
    git的git bash使用
    算法
    RBAC权限管理设计
    beego框架返回json数据
  • 原文地址:https://www.cnblogs.com/lingyejun/p/16212161.html
Copyright © 2020-2023  润新知