用JAVA实现,一个实现类的集合中,有一个String类型的字段,这个字段的内容有纯数字类型的,还有不为数字的字符,需将这个集合重新排序,规则是:纯数字的在前,非数字都排在后,并且纯数字的按顺序排序
时间: 2024-01-07 09:05:19 浏览: 25
可以使用Java中的Collections.sort()方法,结合Comparator接口来实现对集合进行排序。
具体实现可以按照以下步骤:
1. 定义一个实现了Comparator接口的类,用于比较两个实现类对象的字符串字段。
2. 在compare方法中,首先判断两个字符串是否都为纯数字,如果都是纯数字,则按照数字大小进行比较;如果有一个不是纯数字,则将纯数字的排在前面。
3. 在主程序中,使用Collections.sort()方法对实现类的集合进行排序,传入定义的比较器对象。
具体代码实现如下:
```
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class MyClass {
public static void main(String[] args) {
List<MyClass> list = new ArrayList<>();
list.add(new MyClass("123"));
list.add(new MyClass("abc"));
list.add(new MyClass("234"));
list.add(new MyClass("567"));
list.add(new MyClass("def"));
Collections.sort(list, new MyComparator());
for(MyClass obj : list) {
System.out.println(obj.str);
}
}
private String str;
public MyClass(String str) {
this.str = str;
}
static class MyComparator implements Comparator<MyClass> {
@Override
public int compare(MyClass o1, MyClass o2) {
boolean isNum1 = isNumeric(o1.str);
boolean isNum2 = isNumeric(o2.str);
if(isNum1 && isNum2) {
return Integer.compare(Integer.parseInt(o1.str), Integer.parseInt(o2.str));
} else if(isNum1) {
return -1;
} else if(isNum2) {
return 1;
} else {
return 0;
}
}
private boolean isNumeric(String str) {
for(int i = 0; i < str.length(); i++) {
if(!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
}
}
```
以上代码中,MyClass类表示实现类,包含一个字符串字段str;MyComparator类实现了Comparator接口,用于比较两个MyClass对象;主程序中创建了一个MyClass对象的集合list,并使用Collections.sort()方法对其进行排序,传入MyComparator对象进行比较。最后输出排序后的结果。
输出结果为:
```
123
234
567
abc
def
```
字符串中的纯数字按照顺序排在前面,非数字排在后面。