목록을 알파벳 순으로 정렬하려면 어떻게 해야 합니까?
는 나나 a a a가 있다List<String>
국가 이름을 포함하는 개체입니다.이 목록을 알파벳 순으로 정렬하려면 어떻게 해야 하나요?
스트링이라고 가정하면 편리한 정적 방법을 사용합니다.
java.util.Collections.sort(listOfCountryNames)
컬렉션을 포함한 솔루션.종류
해당 목록을 강제로 사용하거나 프로그램이 다음과 같은 구조를 가진 경우
- 목록 작성
- 일부 국가 이름 추가
- 그것들을 한 번 분류하다
- 두 번 다시 그 목록을 바꾸지 마라
그럼 Thilos의 답변이 최선의 방법일 겁니다.Tom Hawtin - taxline의 조언과 결합하면 다음과 같은 결과가 나옵니다.
java.util.Collections.sort(listOfCountryNames, Collator.getInstance());
Tree Set을 사용한 솔루션
자유롭게 결정할 수 있고 응용 프로그램이 더 복잡해질 수 있는 경우 TreeSet을 대신 사용하도록 코드를 변경할 수 있습니다.이런 종류의 컬렉션은 엔트리를 삽입했을 때만 정렬합니다.sort()를 호출할 필요가 없습니다.
Collection<String> countryNames =
new TreeSet<String>(Collator.getInstance());
countryNames.add("UK");
countryNames.add("Germany");
countryNames.add("Australia");
// Tada... sorted.
Tree Set을 선호하는 이유에 대한 참고 사항
여기에는 다음과 같은 미묘하지만 중요한 이점이 있습니다.
- 더 짧아요.하지만 한 줄만 더 짧아요.
- TreeSet은 항상 정렬되어 있기 때문에 이 리스트는 현재 정말로 정렬되어 있다고 걱정할 필요는 없습니다.
- 중복된 엔트리는 사용할 수 없습니다.상황에 따라서는 찬반 양론이 될 수 있습니다.중복이 필요한 경우 목록을 사용하십시오.
- 이 풍부한 가 보고 .
TreeSet<String> countyNames
그리고 바로 알 수 있습니다: 이것은 중복되지 않은 정렬된 Strings 모음입니다. 저는 이것이 항상 사실임을 확신할 수 있습니다.짧은 선언문 안에 많은 정보가 담겨 있습니다. - 경우에 따라서는 진정한 퍼포먼스가 향상됩니다.목록을 사용하여 값을 자주 삽입하고 이러한 삽입 사이에 목록을 읽을 수 있는 경우 삽입할 때마다 목록을 정렬해야 합니다.세트는 같은 작업을 하지만 훨씬 더 빠르게 수행합니다.
적절한 작업에 적절한 컬렉션을 사용하는 것은 짧은 버그 없는 코드를 쓰는 열쇠입니다.이 경우 한 줄만 저장하면 되므로 그다지 입증되지 않습니다.다만, 중복이 없는 것을 확인하고, 그 기능을 스스로 구축하려고 할 때에 리스트를 사용하는 빈도는 세지 않게 되었습니다.더 나쁜 것은 지도가 정말 필요할 때 두 개의 목록을 사용한다는 것입니다.
오해하지 마세요.컬렉션 사용.정렬은 오류나 결함이 아닙니다.하지만 TreeSet이 훨씬 더 깨끗한 경우가 많습니다.
Java 8 Stream 또는 Guava를 사용하여 정렬된 새 복사본을 만들 수 있습니다.
// Java 8 version
List<String> sortedNames = names.stream().sorted().collect(Collectors.toList());
// Guava version
List<String> sortedNames = Ordering.natural().sortedCopy(names);
다른 옵션은 Collections API를 사용하여 일괄 정렬하는 것입니다.
Collections.sort(names);
늦더라도 안하는 것보다는 낫다!(학습 목적으로만) 할 수 있는 방법은 다음과 같습니다.
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class SoftDrink {
String name;
String color;
int volume;
SoftDrink (String name, String color, int volume) {
this.name = name;
this.color = color;
this.volume = volume;
}
}
public class ListItemComparision {
public static void main (String...arg) {
List<SoftDrink> softDrinkList = new ArrayList<SoftDrink>() ;
softDrinkList .add(new SoftDrink("Faygo", "ColorOne", 4));
softDrinkList .add(new SoftDrink("Fanta", "ColorTwo", 3));
softDrinkList .add(new SoftDrink("Frooti", "ColorThree", 2));
softDrinkList .add(new SoftDrink("Freshie", "ColorFour", 1));
Collections.sort(softDrinkList, new Comparator() {
@Override
public int compare(Object softDrinkOne, Object softDrinkTwo) {
//use instanceof to verify the references are indeed of the type in question
return ((SoftDrink)softDrinkOne).name
.compareTo(((SoftDrink)softDrinkTwo).name);
}
});
for (SoftDrink sd : softDrinkList) {
System.out.println(sd.name + " - " + sd.color + " - " + sd.volume);
}
Collections.sort(softDrinkList, new Comparator() {
@Override
public int compare(Object softDrinkOne, Object softDrinkTwo) {
//comparision for primitive int uses compareTo of the wrapper Integer
return(new Integer(((SoftDrink)softDrinkOne).volume))
.compareTo(((SoftDrink)softDrinkTwo).volume);
}
});
for (SoftDrink sd : softDrinkList) {
System.out.println(sd.volume + " - " + sd.color + " - " + sd.name);
}
}
}
Java 8을 사용하는 한 줄:
list.sort(Comparator.naturalOrder());
악센트가 없는 영어로만 문자열을 정렬하지 않는 한, 아마도 당신은 그것을 사용하고 싶을 것이다.Collator
. 발음 구별 마크가 올바르게 정렬되어 대소문자 및 기타 언어 고유의 내용을 무시할 수 있습니다.
Collections.sort(countries, Collator.getInstance(new Locale(languageCode)));
콜레이터의 강도를 설정할 수 있습니다.javadoc 를 참조해 주세요.
슬로바키아어의 예를 다음에 나타냅니다.Š
뒤쫓아야 한다S
단, UTF에서는Š
다음 어딘가에 있다Z
:
List<String> countries = Arrays.asList("Slovensko", "Švédsko", "Turecko");
Collections.sort(countries);
System.out.println(countries); // outputs [Slovensko, Turecko, Švédsko]
Collections.sort(countries, Collator.getInstance(new Locale("sk")));
System.out.println(countries); // outputs [Slovensko, Švédsko, Turecko]
다음의 2개의 인수를 사용합니다.Collections.sort
적절한 제품이 필요하게 될 것입니다.Comparator
(즉, UTF16 순서가 아닌 어휘를 사용하는가)를 통해 얻을 수 있는 것과 같이 적절한 경우를 취급한다.java.text.Collator.getInstance
.
여기 당신이 찾고 있는 것이 있습니다.
listOfCountryNames.sort(String::compareToIgnoreCase)
사용방법Collections.sort()
목록을 정렬할 수 있습니다.
public class EmployeeList {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> empNames= new ArrayList<String>();
empNames.add("sudheer");
empNames.add("kumar");
empNames.add("surendra");
empNames.add("kb");
if(!empNames.isEmpty()){
for(String emp:empNames){
System.out.println(emp);
}
Collections.sort(empNames);
System.out.println(empNames);
}
}
}
출력:
sudheer
kumar
surendra
kb
[kb, kumar, sudheer, surendra]
내림차순 알파벳:
List<String> list;
...
Collections.sort(list);
Collections.reverse(list);
다음 행을 사용할 수 있습니다.
Collections.sort(listOfCountryNames, String.CASE_INSENSITIVE_ORDER)
Thilo의 제안과 비슷하지만 대소문자는 차이가 없습니다.
JAVA 8에서도 동일:-
//Assecnding order
listOfCountryNames.stream().sorted().forEach((x) -> System.out.println(x));
//Decending order
listOfCountryNames.stream().sorted((o1, o2) -> o2.compareTo(o1)).forEach((x) -> System.out.println(x));
Java 8,
countries.sort((country1, country2) -> country1.compareTo(country2));
String의 compareTo가 요구에 적합하지 않은 경우 다른 비교기를 제공할 수 있습니다.
//Here is sorted List alphabetically with syncronized
package com.mnas.technology.automation.utility;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;
/**
*
* @author manoj.kumar
*/
public class SynchronizedArrayList {
static Logger log = Logger.getLogger(SynchronizedArrayList.class.getName());
@SuppressWarnings("unchecked")
public static void main(String[] args) {
List<Employee> synchronizedList = Collections.synchronizedList(new ArrayList<Employee>());
synchronizedList.add(new Employee("Aditya"));
synchronizedList.add(new Employee("Siddharth"));
synchronizedList.add(new Employee("Manoj"));
Collections.sort(synchronizedList, new Comparator() {
public int compare(Object synchronizedListOne, Object synchronizedListTwo) {
//use instanceof to verify the references are indeed of the type in question
return ((Employee)synchronizedListOne).name
.compareTo(((Employee)synchronizedListTwo).name);
}
});
/*for( Employee sd : synchronizedList) {
log.info("Sorted Synchronized Array List..."+sd.name);
}*/
// when iterating over a synchronized list, we need to synchronize access to the synchronized list
synchronized (synchronizedList) {
Iterator<Employee> iterator = synchronizedList.iterator();
while (iterator.hasNext()) {
log.info("Sorted Synchronized Array List Items: " + iterator.next().name);
}
}
}
}
class Employee {
String name;
Employee (String name) {
this.name = name;
}
}
언급URL : https://stackoverflow.com/questions/708698/how-can-i-sort-a-list-alphabetically
'sourcecode' 카테고리의 다른 글
VeValidate 연결 메서드: 필드에 이름이 있는 경우 필드에 "name" 또는 "data-vv-name" 속성이 없습니다. (0) | 2022.08.30 |
---|---|
base64 이미지의 v-card-media (0) | 2022.08.29 |
vue에서 문을 실행하기 전에 비동기 작업이 완료될 때까지 기다리려면 어떻게 해야 합니까? (0) | 2022.08.29 |
C++: 1개의 피연산자를 레지스터에 유지하는 것이 불가사의할 정도로 고속화됨 (0) | 2022.08.29 |
VueJ: 어레이가 아닌 옵서버 객체 (0) | 2022.08.29 |