Java에서 세트를 목록으로 정렬하려면 어떻게합니까?
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);
TreeSet sortedset = new TreeSet();
sortedset.addAll(originalset);
list.addAll(sortedset);
여기서 originalset = 정렬되지 않은 세트 및 list = 반환 될 목록
@Jeremy Stein I wanted to implement same code. As well I wanted to sort the set to list, So instead of using Set I converted set values into List and sort that list by it's one the variable. This code helped me,
set.stream().sorted(Comparator.comparing(ModelClassName::sortingVariableName)).collect(Collectors.toList());
참고URL : https://stackoverflow.com/questions/740299/how-do-i-sort-a-set-to-a-list-in-java
'Programing' 카테고리의 다른 글
httpd : ServerName에 127.0.0.1을 사용하여 서버의 정규화 된 도메인 이름을 안정적으로 확인할 수 없습니다. (0) | 2020.05.30 |
---|---|
float 값이 정수인지 확인하는 방법 (0) | 2020.05.30 |
postgresql information_schema의 모든 테이블을 나열하십시오. (0) | 2020.05.30 |
마지막 프레임에서 CSS3 애니메이션 중지 (0) | 2020.05.30 |
'create_date'시간 소인 필드의 유효하지 않은 기본값 (0) | 2020.05.30 |