上述排序规则有问题,我想要的是完全按照double类型倒序排序,只有当double值一样时才按照String类型排序,请帮我修正代码
时间: 2024-02-15 16:05:42 浏览: 56
好的,以下是修正后的代码:
```java
import java.util.*;
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("3.0");
list.add("1.0");
list.add("2.0");
list.add("2.0a");
list.add("2.0b");
list.add("1.0a");
list.add("1.0c");
list.add("1.0b");
Collections.sort(list, new Comparator<String>() {
public int compare(String o1, String o2) {
double d1, d2;
try {
d1 = Double.parseDouble(o1);
} catch (NumberFormatException e) {
d1 = Double.NEGATIVE_INFINITY;
}
try {
d2 = Double.parseDouble(o2);
} catch (NumberFormatException e) {
d2 = Double.NEGATIVE_INFINITY;
}
if (d1 != d2) {
return Double.compare(d2, d1);
} else {
return o1.compareTo(o2);
}
}
});
System.out.println(list);
}
}
```
主要的修改在于:
1. 将比较器的泛型改成了 `Comparator<String>`。
2. 在比较方法中,先尝试将字符串转换为 double 类型。如果转换失败,则将其视为负无穷大。
3. 如果两个字符串转换后的 double 值不相等,则根据 double 值的大小进行排序,大的排在前面。
4. 如果两个字符串转换后的 double 值相等,则按照字符串的自然顺序进行排序。
阅读全文