Java 数字字符串集合排序(groovy 可能不合适)
/**
* 排序工具类(Java工具类,groovy不能保证可以适用)
* @param list 目标集合,{startIndex}-{endIndex},每个元素该下标范围内必须是正确的数字不能是 0122
* @param startIndex 6 subString.startIndex
* @param endIndex 13 subString.endIndex
* @return list.sort(Comparator.comparingInt(a -> ((int) a)));
*/
public static List<String> sortStrList(List<String> list, Integer startIndex, Integer endIndex) {
String aindex = list.get(0);
int len = aindex.length();
if (len < endIndex || len < startIndex) {
throw new RuntimeException("集合排序List<String>,请检查元素长度:" + len + "," + startIndex + "," + endIndex);
}
list.sort(Comparator.comparing(b -> Integer.parseInt(b.substring(startIndex, endIndex))));
return list;
}
测试
public String test3() {
String str = "0650201123456-489,0650201123987,0650201123110-128";
String str2 = "0650201123456,0650201123457,0650201123458," +
"0650201123485,0650201123486,0650201123487,0650201123488,0650201123489," +
"0650201123460,0650201123461," +
"0650201123480,0650201123481,0650201123482,0650201123483,0650201123484," +
"0650201123470," +
"0650201123490,0650201123491,0650201123492,0650201123493,0650201123494";
List<Integer> ins = new ArrayList<>();
ins.add(12);
ins.add(17);
ins.add(13);
ins.add(10);
ins.add(110);
ins.add(19);
ins.add(120);
String[] strs = str.split(",");
List<String> strsList = Arrays.asList(strs);
//lambda表达式实现List接口sort方法排序
//ins.sort(Comparator.comparingInt(Integer::valueOf));
//ins.sort((a, b) -> a - b); //使用Collections类的方法排序
//ins.sort(Comparator.comparingInt(a -> a)); //使用Collections类的方法排序
log.info("ins1:" + ins);
ins.sort(Comparator.comparingInt(a -> a));
log.info("ins2:" + ins);
log.info("strsList:" + strsList);
TestUtils.sortStrList(strsList, 6, 12);
log.info("strsList:" + strsList);
return "duang~~";
}
输出:
ins1:[12, 17, 13, 10, 110, 19, 120]
ins2:[10, 12, 13, 17, 19, 110, 120]
strsList:[0650201123456, 0650201123457, 0650201123458, 0650201123485, 0650201123486, 0650201123487, 0650201123488, 0650201123489, 0650201123460, 0650201123461, 0650201123480, 0650201123481, 0650201123482, 0650201123483, 0650201123484, 0650201123470, 0650201123490, 0650201123491, 0650201123492, 0650201123493, 0650201123494]
strsList:[0650201123456, 0650201123457, 0650201123458, 0650201123460, 0650201123461, 0650201123470, 0650201123485, 0650201123486, 0650201123487, 0650201123488, 0650201123489, 0650201123480, 0650201123481, 0650201123482, 0650201123483, 0650201123484, 0650201123490, 0650201123491, 0650201123492, 0650201123493, 0650201123494]