배열 목록을 알파벳 순으로 정렬(대문자와 소문자를 구분하지 않음)
문자열 배열 목록이 있습니다.names
사람들의 이름이 들어있어요.배열 목록을 알파벳 순으로 정렬하고 싶습니다.
ArrayList<String> names = new ArrayList<String>();
names.add("seetha");
names.add("sudhin");
names.add("Swetha");
names.add("Neethu");
names.add("ananya");
names.add("Athira");
names.add("bala");
names.add("Tony");
names.add("Karthika");
names.add("Nithin");
names.add("Vinod");
names.add("jeena");
Collections.sort(names);
for(int i=0; i<names.size(); i++)
System.out.println(names.get(i));
나는 위의 방법으로 목록을 정렬하려고 했다.그러나 정렬된 배열은 다음과 같이 표시됩니다.
Athira
Karthika
..
..
ananya
bala
...
대소문자를 민감하게 만들고 싶진 않아요결과는 다음과 같습니다.
ananya
Athira
bala
관습Comparator
도움이 될 것이다
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareToIgnoreCase(s2);
}
});
Java 8을 사용하는 경우:
list.sort(String::compareToIgnoreCase);
가장 간단한 방법은 다음과 같습니다.
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
이 코드를 사용해 보세요.
Collections.sort(yourarraylist, new SortBasedOnName());
import java.util.Comparator;
import com.RealHelp.objects.FBFriends_Obj;
import com.RealHelp.ui.importFBContacts;
public class SortBasedOnName implements Comparator
{
public int compare(Object o1, Object o2)
{
FBFriends_Obj dd1 = (FBFriends_Obj)o1;// where FBFriends_Obj is your object class
FBFriends_Obj dd2 = (FBFriends_Obj)o2;
return dd1.uname.compareToIgnoreCase(dd2.uname);//where uname is field name
}
}
위의 답변을 바탕으로 다음과 같이 커스텀클래스 오브젝트를 비교했습니다.
ArrayList<Item> itemList = new ArrayList<>();
...
Collections.sort(itemList, new Comparator<Item>() {
@Override
public int compare(Item item, Item t1) {
String s1 = item.getTitle();
String s2 = t1.getTitle();
return s1.compareToIgnoreCase(s2);
}
});
유감스럽게도, 지금까지의 모든 답변에는 다음이 고려되지 않았습니다."a"
와 동등하다고 생각해서는 안 된다"A"
분류에 관한 한요.
String[] array = {"b", "A", "C", "B", "a"};
// Approach 1
Arrays.sort(array);
// array is [A, B, C, a, b]
// Approach 2
Arrays.sort(array, String.CASE_INSENSITIVE_ORDER);
// array is [A, a, b, B, C]
// Approach 3
Arrays.sort(array, java.text.Collator.getInstance());
// array is [a, A, b, B, C]
접근법 1에서는 모든 소문자가 어떤 대문자보다 큰 것으로 간주한다.
접근법 2는 CASE_INSECTIVE_ORDER를 고려하기 때문에 상황을 악화시킵니다."a"
그리고."A"
equal (계산 결과는 다음과 같습니다)0
이렇게 하면 정렬이 결정적이지 않습니다.
접근법 3(java.text 사용).콜레이터)는 IMHO만이 올바르게 동작할 수 있는 유일한 방법입니까?"a"
그리고."A"
동일하지 않지만 현재(또는 원하는 다른) 로케일에 따라 올바른 순서로 정렬합니다.
compareTo가 아닌 를 사용하는 커스텀 비교기를 사용해야 합니다.
Java 8부터는 다음을 사용할 수 있습니다.
List<String> sorted = Arrays.asList(
names.stream().sorted(
(s1, s2) -> s1.compareToIgnoreCase(s2)
).toArray(String[]::new)
);
그것으로부터 기류를 얻는다.ArrayList
그 후 정렬합니다(대소문자를 제외).그 후 스트림이 어레이로 변환되어 어레이로 변환됩니다.ArrayList
.
다음을 사용하여 결과를 인쇄하는 경우:
System.out.println(sorted);
다음의 출력이 표시됩니다.
[ananya, Athira, bala, jeena, Karthika, Neethu, Nithin, seetha, sudhin, Swetha, Tony, Vinod]
KOTL개발자
Custome List의 경우 하나의 String을 기준으로 정렬할 경우 다음을 사용할 수 있습니다.
phoneContactArrayList.sortWith(Comparator { item, t1 ->
val s1: String = item.phoneContactUserName
val s2: String = t1.phoneContactUserName
s1.compareTo(s2, ignoreCase = true)
})
def lst = ["A2", "A1", "k22", "A6", "a3", "a5", "A4", "A7"];
println lst.sort { a, b -> a.compareToIgnoreCase b }
대소문자를 구분하지 않고 정렬할 수 있지만 영숫자 문자열 목록을 어떻게 처리해야 할지 모르겠습니다.
코틀린, 문자열 필드별로 객체를 정렬하고 대소문자를 구분하지 않습니다
items?.sortedWith { o1, o2 ->
o1.name.compareTo(o2.name, true)
}
언급URL : https://stackoverflow.com/questions/5815423/sorting-arraylist-in-alphabetical-order-case-insensitive
'programing' 카테고리의 다른 글
.view()는 PyTorch에서 무엇을 합니까? (0) | 2022.09.25 |
---|---|
HTML "no-js" 클래스의 목적은 무엇입니까? (0) | 2022.09.25 |
JavaScript:파일 업로드 (0) | 2022.09.25 |
매개 변수를 사용하여 MariaDB 저장 프로시저 삽입 (0) | 2022.09.25 |
휴지 상태에 인수 생성자가 필요하지 않은 이유는 무엇입니까? (0) | 2022.09.25 |