无论在app开发或Java后端开发,版本比较的场景都比较多,封装一个工具类,方便后面使用。
public class VersionUtil {
public static int compareVersionNo(String version1, String version2) {
String versionNum1 = getNonStringVersionNum(version1);
String versionNum2 = getNonStringVersionNum(version2);
String[] nums1 = versionNum1.split("\\.");
String[] nums2 = versionNum2.split("\\.");
int minLen = Math.min(nums1.length, nums2.length);
for (int i = 0; i < minLen; i++) {
if (!nums1[i].equals(nums2[i])) {
if (StringUtils.isNumeric(nums1[i]) && StringUtils.isNumeric(nums2[i])) {
if (i <= 1) {
return (Integer.parseInt(nums1[i]) % 100) - (Integer.parseInt(nums2[i]) % 100);
} else {
return Integer.parseInt(nums1[i]) - Integer.parseInt(nums2[i]);
}
} else {
return nums1[i].compareTo(nums2[i]);
}
}
}
return 0;
}
public static String getNonStringVersionNum(String versionNum) {
StringBuilder result = new StringBuilder();
if (versionNum != null && !versionNum.isEmpty()) {
for (int i = 1; i < versionNum.length(); i++) {
result.append(versionNum.charAt(i));
}
}
return result.toString();
}
/**
* 版本倒序
*
* @param versionList
* @return
*/
public static List<String> sortDesc(Collection<String> versionList) {
List<String> sortedVersionList = versionList == null ? new ArrayList<String>() : new ArrayList<>(versionList);
sortedVersionList.sort((v1, v2) -> compareVersionNo(v2, v1));
return sortedVersionList;
}
/**
* 版本升序
*
* @param versionList
* @return
*/
public static List<String> sortAsc(Collection<String> versionList) {
List<String> sortedVersionList = versionList == null ? new ArrayList<String>() : new ArrayList<>(versionList);
sortedVersionList.sort((v1, v2) -> compareVersionNo(v1, v2));
return sortedVersionList;
}
}
对版本排序:
List<CompatibleProductVo> compatibleProductVoList = productCompatibilityDao.getConfiguredProduct();
for (CompatibleProductVo compatibleProductVo : compatibleProductVoList) {
List<VersionVo> versionList = compatibleProductVo.getVersionList();
versionList.sort((o1, o2) -> VersionUtil.compareVersionNo(o2.getVersionNumber(), o1.getVersionNumber()));
compatibleProductVo.setVersionList(versionList);
}