示例:
![在这里插入图片描述](https://img-blog.csdnimg.cn/b7a9d91936fe4f6a988752df46c6b175.png)
实体类
public class TaskDTO {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public TaskDTO() {
}
public TaskDTO(String name) {
this.name = name;
}
@Override
public String toString() {
return "TaskDTO{" +
"name='" + name + '\'' +
'}';
}
}
main方法
import java.util.*;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Sort {
public static void main(String[] args) {
List<TaskDTO> dtos = initList();
System.out.println("排序前:");
for (TaskDTO dto : dtos) {
System.out.println(dto);
}
List<TaskDTO> sort = sort(dtos);
System.out.println("排序后:");
for (TaskDTO dto : sort) {
System.out.println(dto);
}
}
public static List<TaskDTO> sort(List<TaskDTO> dtos) {
final Pattern PATTERN = Pattern.compile("-?[0-9]+.?[0-9]*");
final String REGEX_CHINESE = "[\u4e00-\u9fa5]";
Collections.sort(dtos, new Comparator<TaskDTO>() {
@Override
public int compare(TaskDTO o1, TaskDTO o2) {
String name1 = o1.getName();
String name2 = o2.getName();
int index = 0;
Integer i1 = 0;
String s1 = "";
for (index = name1.length() - 1; index >= 0; index --) {
Matcher matcher = PATTERN.matcher(String.valueOf(name1.charAt(index)));
if (!matcher.matches()) {
break;
}
i1 = Integer.valueOf(name1.substring(index));
s1 = name1.substring(0,index);
}
s1 = s1.replaceAll(REGEX_CHINESE, "");
Integer i2 = 0;
String s2 = "";
for (index = name2.length() - 1; index >= 0; index --) {
Matcher matcher = PATTERN.matcher(String.valueOf(name2.charAt(index)));
if (!matcher.matches()) {
break;
}
i2 = Integer.valueOf(name2.substring(index));
s2 = name2.substring(0,index);
}
s2 = s2.replaceAll(REGEX_CHINESE, "");
if (s1.equals(s2)) {
return i1 - i2;
}
return s1.compareTo(s2);
}
});
return dtos;
}
public static List<TaskDTO> initList() {
List<TaskDTO> list = new ArrayList<>();
list.add(new TaskDTO("20230102张三1"));
list.add(new TaskDTO("202301张三3"));
list.add(new TaskDTO("20230102张三2"));
list.add(new TaskDTO("20230102张三12"));
list.add(new TaskDTO("20230209张三21"));
list.add(new TaskDTO("202303张三14"));
list.add(new TaskDTO("20230101张三01"));
list.add(new TaskDTO("20230102张三3"));
return list;
}
}
参考链接