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

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

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

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

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

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

代码语言:javascript代码运行次数:0运行复制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 versionList = Arrays.asList(version1, version3, version2);

List 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;就可以直接得到最大的版本了。

相关推荐

2022世界杯巴西队完整赛程及群雄对决比分分析
外勤365系统

2022世界杯巴西队完整赛程及群雄对决比分分析

📅 08-07 👁️ 6772
魔兽世界7.0最强职业盘点!满级职业哪家强?
365足球提现

魔兽世界7.0最强职业盘点!满级职业哪家强?

📅 07-30 👁️ 8341
蒙古帝国
外勤365系统

蒙古帝国

📅 07-11 👁️ 7639