一、app版本排序

1、从数据库查询app数据

CREATE TABLE `app` (`id` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,`created_at` datetime DEFAULT NULL COMMENT '创建时间',`modified_at` datetime DEFAULT NULL COMMENT '更新时间',`created_by` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',`modified_by` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',`version` int DEFAULT NULL COMMENT '版本(乐观锁)',`is_delete` int DEFAULT NULL COMMENT '逻辑删除',`tenant_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '租户编号',`name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称',`edition` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '版本',`remark` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',`uri` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '附件路径',`type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '类型',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='App';

插入几条数据


INSERT INTO `app`(`id`, `created_at`, `modified_at`, `created_by`, `modified_by`, `version`, `is_delete`, `tenant_code`, `name`, `edition`, `remark`, `uri`, `type`) VALUES ('4147ebd79f92bca319259441590f7c59', '2020-12-02 09:37:33', '2020-12-09 15:26:13', '05406b5219a34e04ab32e666f297c37a', '5f8c92f4841235a48e498520cea74a64', 3, 0, NULL, '爷4.1', '4.1', '修改', 'group1/M035/wKgB4V_G7-WAaeB_AfwnGpGeFnk872.apk', 'laoye');
INSERT INTO `app`(`id`, `created_at`, `modified_at`, `created_by`, `modified_by`, `version`, `is_delete`, `tenant_code`, `name`, `edition`, `remark`, `uri`, `type`) VALUES ('e33b4cd3889a9b7b61783d1579c4369d', '2020-10-31 17:04:39', '2020-10-31 17:05:08', '5f8c92f4841235a48e498520cea74a64', '5f8c92f4841235a48e498520cea74a64', 1, 0, NULL, '2.1', '2.1', '样式修改', 'group101/FD/wKgB-l-dJ46AYFwaAeEdUGM_L9Q514.apk', 'laoye');
INSERT INTO `app`(`id`, `created_at`, `modified_at`, `created_by`, `modified_by`, `version`, `is_delete`, `tenant_code`, `name`, `edition`, `remark`, `uri`, `type`) VALUES ('03ec02bfeac2d92efeca54758e402afb', '2020-10-30 14:20:54', '2020-10-30 14:41:47', '20f748ce6c4c5e3771d080ceb220ca8b', '20f748ce6c4c5e3771d080ceb220ca8b', 2, 0, NULL, '爷', '2.0', '上线', 'group1/M00//wKgB-l-br7uAOivMAeEb0L11RzE765.apk', 'laoye');
INSERT INTO `app`(`id`, `created_at`, `modified_at`, `created_by`, `modified_by`, `version`, `is_delete`, `tenant_code`, `name`, `edition`, `remark`, `uri`, `type`) VALUES ('96b31b5bc8437a020ef13181c8b28e53', '2020-10-30 13:58:44', '2020-10-30 14:12:41', '05406b5219a34e04ab32e666f297c37a', '20f748ce6c4c5e3771d080ceb220ca8b', 1, 0, NULL, '爷', '1.1.4', '类型判断', 'group1/1/CE/wKgB-l-bqouABTYZAeEbvOPMqRk053.apk', 'laoye');
INSERT INTO `app`(`id`, `created_at`, `modified_at`, `created_by`, `modified_by`, `version`, `is_delete`, `tenant_code`, `name`, `edition`, `remark`, `uri`, `type`) VALUES ('60b116c2ab09fb6f71235861a2501031', '2020-10-30 10:11:22', '2020-10-30 11:40:06', '20f748ce6c4c5e3771d080ceb220ca8b', '05406b5219a34e04ab32e666f297c37a', 1, 0, NULL, '爷', '1.1.2', '新增头像', 'group1/07/wKgB-l-bdUCAFLFgAeEWDLRCmmQ745.apk', 'laoye');

2、实体类

/*** App* @author 111*/
@ApiModel(value = "App", description = "App")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString(callSuper = true)
@Accessors(chain = true)
@TableName(value = "app")
public class App extends StringSuperEntity<App> {/** 名称 */@ApiModelProperty(value = "名称", position = 10, required = true)@Column(length = 32)private String name;/** 版本 */@ApiModelProperty(value = "版本", position = 12, required = true)@Column(length = 32)private String edition;/** 备注 */@ApiModelProperty(value = "备注", position = 14)@Column(length = 300)private String remark;/** 附件路径 */@ApiModelProperty(value = "附件路径", position = 16, required = true)@Column(length = 150)private String uri;/** 类型 */@ApiModelProperty(value = "类型", position = 18)@Column(length = 100)private String type;/** 主键 */@ApiModelProperty(value = "主键", position = 1)private PK id;/** 创建时间 */@ApiModelProperty(value = "创建时间", position = 2)@TableField(fill = FieldFill.INSERT)private LocalDateTime createdAt;/** 更新时间 */@ApiModelProperty(value = "更新时间", position = 3)@TableField(fill = FieldFill.INSERT_UPDATE)private LocalDateTime modifiedAt;/** 创建人 */@Column(length = 32)@ApiModelProperty(value = "创建人", position = 4)@TableField(fill = FieldFill.INSERT)private String createdBy;/** 更新人 */@Column(length = 32)@ApiModelProperty(value = "更新人", position = 5)@TableField(fill = FieldFill.INSERT_UPDATE)private String modifiedBy;/** 版本(乐观锁) */@ApiModelProperty(value = "版本(乐观锁)", position = 6)@Version@TableField(fill = FieldFill.INSERT)private Integer version;/** 逻辑删除 */@ApiModelProperty(value = "逻辑删除", position = 7)@TableField(fill = FieldFill.INSERT)private BooleanType isDelete;
}

3、三层代码
controller

    /*** 获取最新App信息* @param type 类型* @return App VO*/@ApiOperation(value = "获取最新App信息", notes = "获取最新App信息")@GetMapping("/{type}/fresh")ResponseInfo<AppVO> fresh(@ApiParam(value = "type", required = true) @PathVariable String type);

controllerimpl

    @Overridepublic ResponseInfo<AppVO> fresh(String type) {String version = sortVersion(type);App app = appService.selectOne(this.appService.createQueryWrapper().lambda().eq(App::getEdition,version));return ResponseInfo.ofOkOrNoContent(BeanConverts.convert(app, AppVO.class));}public String sortVersion(String type){List<App> appVersionList = appService.selectList(this.appService.createQueryWrapper().lambda().eq(App::getType,type));List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();for (int i = 0 ;i <= appVersionList.size()-1;i++){Map<String,Object> map = new HashMap<String, Object>();map.put("compareKey", appVersionList.get(i).getEdition());list.add(map);}return AppVersionCompare.sort(list).get(list.size()-1).get("compareKey").toString();}

AppVersionCompare


import java.util.*;public class AppVersionCompare implements Comparator<Map<String, Object>> {/*** 排序用到的key*/private String key;public AppVersionCompare(String key) {this.key = key;}@Overridepublic int compare(Map<String, Object> o1, Map<String, Object> o2) {// 获取比较的字符串String compareValue1 = (String) o1.get(key);String compareValue2 = (String) o2.get(key);String[] valueSplit1 = compareValue1.split("[.]");String[] valueSplit2 = compareValue2.split("[.]");int minLength = valueSplit1.length;if (minLength > valueSplit2.length) {minLength = valueSplit2.length;}for (int i = 0; i < minLength; i++) {int value1 = Integer.parseInt(valueSplit1[i]);int value2 = Integer.parseInt(valueSplit2[i]);if(value1 > value2){return 1;}else if(value1 < value2){return -1;}}return valueSplit1.length - valueSplit2.length;}public static List<Map<String,Object>> sort(List<Map<String,Object>> list) {Collections.sort(list, new AppVersionCompare("compareKey"));return list;}
}

获取到最新版本

排序之前的版本

排序后的版本

二、app版本比较大小

    /***  比较两个版本号的大小,如果version1大于version2,返回值为1,等于为0,小于为-1*  例如:1.2.4和1.1.100比较大小,应是前者大于后者!* @param version1 第一个版本号* @param version2 目标版本号* @return*/public static Integer compareVersion(String version1, String version2) {if (version1.equals(version2)) {return 0;}String[] version1Array = version1.split("[._]");String[] version2Array = version2.split("[._]");int index = 0;int minLen = Math.min(version1Array.length, version2Array.length);long diff = 0;while (index < minLen&& (diff = Long.parseLong(version1Array[index])- Long.parseLong(version2Array[index])) == 0) {index++;}if (diff == 0) {for (int i = index; i < version1Array.length; i++) {if (Long.parseLong(version1Array[i]) > 0) {return 1;}}for (int i = index; i < version2Array.length; i++) {if (Long.parseLong(version2Array[i]) > 0) {return -1;}}return 0;} else {return diff > 0 ? 1 : -1;}}

Java实现app版本排序和版本比较相关推荐

  1. 安卓实现APP自动检测软件版本并提示更新

    安卓实现APP自动检测软件版本并提示更新 前言 当我们在做安卓项目的时候,客户的需求往往难免会发生变动.但是我们的产品已经上线了,却又需要修改的话我们该怎么办呢?也许很多应用商店已经集成了这个功能,只 ...

  2. java查询app下载量统计_java基础增强:统计网上app下载情况,并排序

    一入编程深似海,从此妹子是路人. 案例: 统计网站app下载的情况,后台数据如下: 日期,用户名,app名,下载渠道,所在城市,app版本 2017-08-15,xx老师,陌陌,app store,上 ...

  3. Java 获取操作系统名字、系统版本、cpu信息

    Java 获取操作系统名字.系统版本.cpu信息 System.getProperty("os.name");//得到操作系统名字 System.getProperty(" ...

  4. android app 历史版本,怎么找到App的所有历史版本,以及每次改版的变更点呢?

    来自知乎的一个问题. 提问时间应该挺早的,能看到的最早的回答是2011年2月份. 关注者242,被浏览42,079. 7年来,加上我最新的一个回答,一共有19个回答. 随时间流逝,里面的一些信息已经不 ...

  5. eclipse android或者Java应用查看jdk路径和版本与android studio查看jdk版本

    elipse IDE环境下jdk配置: eclipse -.> window ->preferences ->java -> Installed JRES 对于android工 ...

  6. Java 9 将采用新的版本字符串格式

    在现有的版本编码格式使用了两年之后,从Java 9开始,Java版本方案将根据业内软件版本编码的最佳实践进行修改.使用或解析Java版本字符串的应用程序开发人员要注意了,因为这种变化可以会影响他们的应 ...

  7. java 对应sql驱动版本_关于Oracle JDBC驱动版本、JDK版本、数据库版本对应关系(相关的报错:ORA-28040)...

    关于Oracle JDBC驱动版本.JDK版本.数据库版本对应关系 说明: 1.Oracle JDBC驱动版本查看方式(Oracle JDBC驱动程序随Oracle数据库服务器一起提供)(用户:Ora ...

  8. 我的世界JAVA版编程语言_Java版版本记录/开发版本

    此页面并非官方版本记录或更新日志.官方日志请见Minecraft官网. 关于1.11及此前版本,请见Mojang官网. 关于Beta 1.8及此前版本,请见Notch的博客,Word of Notch ...

  9. 各大软件的 java版本_Java 各个版本的软件 1.4 1.5 5.0 6.0

    本人绝对支持原创!!! Java SE Development Kit(JDK)和Java Runtime Envirnment(JRE)1.3.1.4.1.5(5.0).6.0 各版本下载地址大全 ...

  10. 链表排序---迭代版本归并算法 + [leetcode]148. 排序链表

    前言: 对于链表来说,排序首选应该是归并算法 维基百科上有归并算法的迭代版本和递归版本 基于数组实现的. https://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B ...

最新文章

  1. Centos7 搭建 k8s 环境教程,一次性成功
  2. 三. H.264简介
  3. Struts2标签库常用标签
  4. ~~spfa判断图中是否存在负环
  5. c语言语句结束的标准,C语言的语句要求以哪种符号结束?
  6. windows注册表解析说明
  7. 实用分享-MAC修改器(摆脱网络封锁的困扰)
  8. Python的学习笔记案例4--52周存钱挑战3.0
  9. 数学不好是原罪——高等数学笔记(汇总版)
  10. 《从0到1》读书笔记第2章像1999 年那样狂欢第1记:小结及词汇解析
  11. 什么是交叉(cross-over)网线?
  12. 鸡兔同笼问题java解决
  13. 海淘 亚马逊 冻结账号 怎么办?
  14. 【shaderforge学习笔记】 Parallax节点(视差节点)
  15. Palindromic Tree——回文树【处理一类回文串问题的强力工具】
  16. Tennessee Eastman(TE过程)简介
  17. arm-linux-strip,arm-linux-strip
  18. Latex语法数学公式参考整理
  19. linux中出现不在 sudoers 文件中。此事将被报告的解决方法
  20. 第一次拼命的跟别人挤,找明星签名!!!

热门文章

  1. 有毒领导的8种常见恶习!中1条都没人跟你混!
  2. C51——点动控制小车
  3. 基于深度学习的车牌识别
  4. Name for argument type [java.lang.String] not avai
  5. 开讲啦:Chap 06 利用数组处理批量数据
  6. H3C交换机设置DHCP中继的过程
  7. jssdk 上传图片 java_微信服务号开发之jssdk-照片上传、下载 总结
  8. IT,挨踢?走在十字路口的大学IT民工党
  9. 三氯化磷的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  10. PL/SQL选择电话号码的前三位(正则表达式)