特殊字符串排序,本人在遇到时间段排序时新封的包,望大家择优而选。
话不多说,案例摆上。
sortByStr通过字符串分割来排序,取到 “:” 之前的字符串,并进行排序
按照字符串指定位数的字符比较排序。如下指定字符串中的数据位数为5。
按照字符串指定区间位数的字符比较排序
import lombok.extern.slf4j.Slf4j;
import java.util.*;
/**
* @author cgj
* @since 2020/05/08
*/
@Slf4j
public class SortUtil {
/**
* 按照字符串指定位数的字符比较排序
* @param list 对比的字符串列表
* @param bit 字符串的对比参数位置
* @return
*/
public static List<String> sortByInt(List<String> list, Integer bit) {
if (bit == 0) {
return null;
}
int realBit = bit - 1;
HashMap<Integer, String> integerStringHashMap = new HashMap<>();
for (String str : list) {
// 如果list空则返回
if (list.isEmpty()) {
return null;
}
char n = str.charAt(realBit);
int nn = n-'0';
integerStringHashMap.put(nn, str);
}
Set<Integer> sets = integerStringHashMap.keySet();
List<Integer> keys = new ArrayList<>(sets);
Collections.sort(keys);
ArrayList<String> inputList = new ArrayList<>();
for (Integer key : keys) {
inputList.add(integerStringHashMap.get(key));
}
return inputList;
}
/**
* 按照字符串指定区间位数的字符比较排序
* @param list 对比的字符串列表
* @param bitStart 开始位数(包括)
* @param bitEnd 结束位数(包括)
* @return
*/
public static List<String> sortByInt(List<String> list, Integer bitStart, Integer bitEnd) {
if (bitStart == 0 || bitEnd == 0 || bitStart >= bitEnd) {
return null;
}
int realBitStart = bitStart - 1;
int realBitEnd = bitEnd;
HashMap<Integer, String> integerStringHashMap = new HashMap<>();
for (String str : list) {
// 如果list空则返回
if (list.isEmpty()) {
return null;
}
Integer integer = Integer.valueOf(str.substring(realBitStart, realBitEnd));
integerStringHashMap.put(integer, str);
}
Set<Integer> sets = integerStringHashMap.keySet();
List<Integer> keys = new ArrayList<>(sets);
Collections.sort(keys);
ArrayList<String> inputList = new ArrayList<>();
for (Integer key : keys) {
inputList.add(integerStringHashMap.get(key));
}
return inputList;
}
/**
* st第一次出现分割字符串,st前的字符串大小排序
* @param list 对比的字符串列表
* @param st 字符第一次出现的时候
* @return
*/
public static List<String> sortByStr(List<String> list, String st) {
if (st == null || st == "") {
return null;
}
HashMap<Integer, String> integerStringHashMap = new HashMap<>();
for (String str : list) {
// 如果list空则返回
if (list.isEmpty()) {
return null;
}
Integer integer = Integer.valueOf(str.substring(0, str.indexOf(st)));
integerStringHashMap.put(integer, str);
}
Set<Integer> sets = integerStringHashMap.keySet();
List<Integer> keys = new ArrayList<>(sets);
Collections.sort(keys);
ArrayList<String> inputList = new ArrayList<>();
for (Integer key : keys) {
inputList.add(integerStringHashMap.get(key));
}
return inputList;
}
}