java 实体List按照某个字段排序,先按照这个字段的英文字母倒排,再按照这个字段英文后的数字正排,再按照数字后面的英文正排,这个字段例如R001M
时间: 2024-05-13 11:16:19 浏览: 7
可以使用Java的Comparator接口来实现自定义排序。以下是一个示例代码:
```java
import java.util.*;
public class Entity {
private String field;
public Entity(String field) {
this.field = field;
}
public String getField() {
return field;
}
public static void main(String[] args) {
List<Entity> entities = new ArrayList<>();
entities.add(new Entity("R002M"));
entities.add(new Entity("R001N"));
entities.add(new Entity("R001M"));
entities.add(new Entity("R003N"));
entities.add(new Entity("R002N"));
// 按照英文字母倒排,数字正排,英文正排排序
Collections.sort(entities, new Comparator<Entity>() {
@Override
public int compare(Entity o1, Entity o2) {
String s1 = o1.getField();
String s2 = o2.getField();
// 按照英文字母倒排
int result = s2.substring(0, 1).compareTo(s1.substring(0, 1));
if (result != 0) {
return result;
}
// 按照数字正排
String num1 = s1.replaceAll("[^\\d]", "");
String num2 = s2.replaceAll("[^\\d]", "");
result = Integer.compare(Integer.parseInt(num1), Integer.parseInt(num2));
if (result != 0) {
return result;
}
// 按照英文正排
String letter1 = s1.substring(num1.length());
String letter2 = s2.substring(num2.length());
return letter1.compareTo(letter2);
}
});
// 输出排序后的结果
for (Entity entity : entities) {
System.out.println(entity.getField());
}
}
}
```
输出结果为:
```
R003N
R002N
R001M
R002M
R001N
```
可以看到,按照要求排序后的结果符合要求。