我正在从 UI 值中读取值,并使用排序函数进行升序和降序排序并进行验证,但排序失败,因为您可以看到这些值是根据初始数字或 int 值进行排序的。 我如何修复或排序整个数字以及字母单词,即;未知、错误等。
public void sortFunction(List valuesFromUI){
List<String> sortValues = new LinkedList<String>();
sortValues.addAll(valuesFromUI));
**Ascending values from UI:**
[Unknown, Unknown, 13,125, 65,029, 280,552, 281,012, 987,072, 988,775, 1,250,203, 2,363,356, 4,042,563]
**Descending values from UI: **
[4,042,563, 2,363,356, 1,250,203, 988,775, 987,072, 281,012, 280,552, 65,029, 13,125, Unknown, Unknown]
//Ascending
Collections.sort(sortValues );
System.out.println("[1,250,203, 13,125, 2,363,356, 280,552, 281,012, 4,042,563, 65,029, 987,072, 988,775, Unknown, Unknown");
//Descending
Collections.sort(sortValues, Collections.reverseOrder());
System.out.println("[Unknown, Unknown, 988,775, 987,072, 65,029, 4,042,563, 281,012, 280,552, 2,363,356, 13,125, 1,250,203]");
}
您需要编写自己的
Comparator
,它将包含带有千位分隔符的数字的字符串解析为整数,并识别您的特殊值Error
和Unknown
。
这段代码做了一些简化的假设:
-1
和 -2
作为 Unknown
和 Error
的哨兵值。import java.text.NumberFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
public class ComparatorExample {
public static void main(String[] args) {
String[] data = {"Unknown", "Error", "13,125", "65,029", "280,552", "281,012", "987,072", "988,775", "1,250,203", "2,363,356", "4,042,563"};
List<String> sortValues = new ArrayList<>(Arrays.asList(data));
sortValues.sort(new MyComparator());
System.out.println(sortValues);
}
}
class MyComparator implements Comparator<String> {
NumberFormat format = NumberFormat.getNumberInstance(Locale.US);
@Override
public int compare(String o1, String o2) {
try {
int n1 = value(o1);
int n2 = value(o2);
return n1 - n2;
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
private int value(String v) throws ParseException {
if (v.equals("Unknown")) {
return -1;
} else if (v.equals("Error")) {
return -2;
} else {
return format.parse(v).intValue();
}
}
}