假设我有一个字符串数组,例如:
1000
2000
100
200
20
10
如何对它们进行排序,以便第一个数字按数字顺序排序,但它是最长的第一个数字?
例如
1000
100
10
2000
200
20
(这可能是微不足道的,但我就是想不出任何东西)。
最佳答案
实现一个比较器,首先对第一个数字进行排序,然后对长度进行反向排序。
在 Java 8+ 中:
Comparator<String> yourComparator =
Comparator.comparing((String s) -> s.charAt(0))
.thenComparing(
Comparator.comparing(String::length).reversed());
如果您仍然停留在黑暗时代,您可以明确地实现这一点:
Comparator<String> yeOldeComparator = new Comparator<String>() {
@Override public int compare(String a, String b) {
int cmpFirst = Integer.compare(a.charAt(0), b.charAt(0));
if (cmpFirst != 0) return cmpFirst;
return Integer.compare(b.length(), a.length());
}
};
请注意,它们都不处理空(或 null)字符串。
<小时/>回应Patrick Parker's如果输入的长度相同且以相同字符开头,您可能需要添加进一步的排序以确保稳定的顺序。
在 Java 8 情况下:
// ... As above, but add this before the semicolon:
.thenComparing(naturalOrder());
在 Java 8 之前的情况下:
// Replace return Integer.compare with:
int cmpLength = Integer.compare(b.length(), a.length());
if (cmpLength != 0) return cmpLength;
return a.compareTo(b);
关于java - 数字顺序,但最长的数字在前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42980293/