ArrayList를 오름차순으로 정렬하는 데 문제가 있습니다. Comparator와 Collator Of Collection 클래스를 사용하고 있습니다. 예상되는 정렬 순서를 어떻게 잡을 수 있습니까? 도움을 많이 주시면 감사하겠습니다. 알고리즘에 의해 계산Java에서 Comparator를 사용하여 ArrayList를 정렬
오름차순 순서는 다음과 같습니다
[AutomationRejectNotification|,AutomationRejectNotification1011, AutomationRejectNotification1021,AutomationTestNotification1, AutomationTestNotification100,AutomationTestNotification2,testDisplay Template, Testing Chrome, Testing Field, Test Notfication, testnotif, Test Notification #1]
예상 오름차순 정렬 순서는 다음과 같습니다
[AutomationRejectNotification1011, AutomationRejectNotification1021, AutomationRejectNotification|,AutomationTestNotification1, AutomationTestNotification2,AutomationTestNotification100,Test Notfication, Test Notification #1, testDisplay Template, Testing Chrome, Testing Field, testnotif]
자바 코드 :
public static void listSort(List<String> o1, boolean order) {
final Pattern p = Pattern.compile("^\\d+");
Comparator<String> c = new Comparator<String>() {
public int compare(String object1, String object2) {
Collator collator = Collator.getInstance(Locale.US);
Matcher m = p.matcher(object1);
if (!m.find()) {
return collator.compare(object1, object2);
} else {
Long number2 = null;
Long number1 = Long.parseLong(m.group());
m = p.matcher(object2);
if (!m.find()) {
return collator.compare(object1, object2);
} else {
number2 = Long.parseLong(m.group());
int comparison = number1.compareTo(number2);
if (comparison != 0) {
return comparison;
} else {
return collator.compare(object1, object2);
}
}
}
}
};
o1.sort(c);
그건 Collator가 작동하는 방식입니다. 이 기사를 보시기 바랍니다 : https://documentation.progress.com/output/Corticon/5.3.2/suite_prototype/rfi1341263753418.html – WinterN
아니요, @WinterN, Collator가 작동하는 방식이 아닙니다. 특히 미국 지역에서는 '|'문자가 10 진수 뒤 * 뒤에옵니다. 따라서 "AutomationRejectNotification |"은 "AutomationRejectNotification1011"뒤에 콜리 전되며 OP에 의해보고 된 순서와는 반대입니다. –
@kaps - 예상 출력의 단일 예제를 제공하는 대신 임의의 입력 목록에 적용 할 정렬 규칙을 지정할 수 있습니까? –