Java에서 세트를 목록으로 정렬하려면 어떻게합니까? 정렬 된로 바꾸고 싶습니다 List. 의 방법이

Java Set에는가 있고 정렬 된로 바꾸고 싶습니다 List. 의 방법이 java.util.Collections나를 위해이 작업을 수행 할 패키지는?



답변

OP제공하는 답변 이 최선이 아닙니다. 이 새로운를 생성으로는 비효율적입니다 List 불필요한 새로운 배열. 또한 일반 배열과 관련된 유형 안전 문제로 인해 “확인되지 않은”경고가 발생합니다.

대신 다음과 같이 사용하십시오.

public static
<T extends Comparable<? super T>> List<T> asSortedList(Collection<T> c) {
  List<T> list = new ArrayList<T>(c);
  java.util.Collections.sort(list);
  return list;
}

사용법 예는 다음과 같습니다.

Map<Integer, String> map = new HashMap<Integer, String>();
/* Add entries to the map. */
...
/* Now get a sorted list of the *values* in the map. */
Collection<String> unsorted = map.values();
List<String> sorted = Util.asSortedList(unsorted);

답변

정렬 된 세트 :

return new TreeSet(setIWantSorted);

또는:

return new ArrayList(new TreeSet(setIWantSorted));

답변

List myList = new ArrayList(collection);
Collections.sort(myList);

… 그러나 트릭을해야합니다. 해당되는 경우 Generics로 플레이버를 추가하십시오.


답변

다음은 Java 8 스트림으로 수행 할 수있는 방법입니다.

mySet.stream().sorted().collect(Collectors.toList());

또는 커스텀 비교기 사용 :

mySet.stream().sorted(myComparator).collect(Collectors.toList());

답변

정렬 구현을 제공하기 위해 Comparator 또는 Comparable 인터페이스를 사용하는 것이 항상 안전합니다 (오브젝트가 기본 데이터 유형의 String 또는 Wrapper 클래스가 아닌 경우). 이름을 기준으로 직원을 정렬하기위한 비교기 구현의 예로

    List<Employees> empList = new LinkedList<Employees>(EmpSet);

    class EmployeeComparator implements Comparator<Employee> {

            public int compare(Employee e1, Employee e2) {
                return e1.getName().compareTo(e2.getName());
            }

        }

   Collections.sort(empList , new EmployeeComparator ());

Comparator는 동일한 객체에 대해 다른 정렬 알고리즘이 필요할 때 유용합니다 (예 : emp name, emp salary 등). 필요한 객체에 대한 비교 가능한 인터페이스를 사용하여 단일 모드 정렬을 구현할 수 있습니다.


답변

이를 수행하는 단일 방법은 없습니다. 이것을 사용하십시오 :

@SuppressWarnings("unchecked")
public static <T extends Comparable> List<T> asSortedList(Collection<T> collection) {
  T[] array = collection.toArray(
    (T[])new Comparable[collection.size()]);
  Arrays.sort(array);
  return Arrays.asList(array);
}

답변

세트를으로 변환 ArrayList하여를 ArrayList사용하여 정렬 할 수 있습니다 Collections.sort(List).

코드는 다음과 같습니다.

keySet = (Set) map.keySet();
ArrayList list = new ArrayList(keySet);
Collections.sort(list);