1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java实现List/Set集合排序:集合内容是字符串 字符串(包含汉字 英文字母 数字)集合的排序

java实现List/Set集合排序:集合内容是字符串 字符串(包含汉字 英文字母 数字)集合的排序

时间:2021-10-15 22:28:15

相关推荐

java实现List/Set集合排序:集合内容是字符串 字符串(包含汉字 英文字母 数字)集合的排序

java实现List/Set集合排序:集合内容是字符串,字符串(包含汉字,英文字母,数字)集合的排序

工具类如下:

package com.acconsys.util;import java.util.Collections;import java.util.List;public class CollectionCustomUtil {public static void sort(List<String> designNameList) {Collections.sort(designNameList, (str1, str2) -> {// 处理数据为null的情况if (str1 == null && str2 == null) {return 0;}if (str1 == null) {return -1;}if (str2 == null) {return 1;}// 比较字符串中的每个字符char c1;char c2;// 逐字比较返回结果for (int i = 0; i < str1.length(); i++) {c1 = str1.charAt(i);try {c2 = str2.charAt(i);} catch (StringIndexOutOfBoundsException e) { // 如果在该字符前,两个串都一样,str2更短,则str1较大return 1;}// 如果都是数字的话,则需要考虑多位数的情况,取出完整的数字字符串,转化为数字再进行比较if (Character.isDigit(c1) && Character.isDigit(c2)) {String numStr1 = "";String numStr2 = "";// 获取数字部分字符串for (int j = i; j < str1.length(); j++) {c1 = str1.charAt(j);if (!Character.isDigit(c1) && c1 != '.') { // 不是数字则直接退出循环break;}numStr1 += c1;}for (int j = i; j < str2.length(); j++) {c2 = str2.charAt(j);if (!Character.isDigit(c2) && c2 != '.') { // 考虑可能带小数的情况break;}numStr2 += c2;}// 转换成数字数组进行比较 适配 1.25.3.5 这种情况String[] numberArray1 = numberStrToNumberArray(numStr1);String[] numberArray2 = numberStrToNumberArray(numStr2);return compareNumberArray(numberArray1, numberArray2);}// 不是数字的比较方式if (c1 != c2) {return c1 - c2;}}return 0;});}/*** 数字字符串转数字数组* 适配 1.25.3.5 这种情况 ,同时如果不不包含小数点【整数情况】** @return*/public static String[] numberStrToNumberArray(String numberStr) {// 按小数点分割字符串数组String[] numberArray = numberStr.split("\\.");// 长度为0说明没有小数点,则整个字符串作为第一个元素if (numberArray.length == 0) {numberArray = new String[]{numberStr};}return numberArray;}/*** 比较两个数字数组** @param numberArray1* @param numberArray2* @return*/public static int compareNumberArray(String[] numberArray1, String[] numberArray2) {for (int i = 0; i < numberArray1.length; i++) {if (numberArray2.length < i + 1) { // 此时数字数组2比1短,直接返回return 1;}int compareResult = Integer.valueOf(numberArray1[i]).compareTo(Integer.valueOf(numberArray2[i]));if (compareResult != 0) {return compareResult;}}// 说明数组1比数组2短,返回小于return -1;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。