Java 컬렉션이 있습니다.
Collection<CustomObject> list = new ArrayList<CustomObject>();
CustomObject
이 id
필드는 현재 표시 목록 전에 그하여이 컬렉션을 정렬 할 id
.
그렇게 할 수있는 방법이 있습니까?
답변:
비교기 사용 :
List<CustomObject> list = new ArrayList<CustomObject>();
Comparator<CustomObject> comparator = new Comparator<CustomObject>() {
@Override
public int compare(CustomObject left, CustomObject right) {
return left.getId() - right.getId(); // use your logic
}
};
Collections.sort(list, comparator); // use the comparator as much as u want
System.out.println(list);
또한을 CustomObject
구현하는 Comparable
경우 다음을 사용하십시오.Collections.sort(list)
List<CustomObject> list = getCustomObjectList();
Collections.sort(list, (left, right) -> left.getId() - right.getId());
System.out.println(list);
훨씬 간단
List<CustomObject> list = getCustomObjectList();
list.sort((left, right) -> left.getId() - right.getId());
System.out.println(list);
가장 간단
List<CustomObject> list = getCustomObjectList();
list.sort(Comparator.comparing(CustomObject::getId));
System.out.println(list);
분명히 초기 코드는 JDK 8에도 사용할 수 있습니다.
질문은 "Sort Collection"입니다. 그래서 당신은 사용할 수 없습니다Collections.sort(List<T> l, Comparator<? super T> comparator)
.
몇 가지 팁 :
컬렉션 유형 :
Comparator<String> defaultComparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
};
Collection<String> collection = getSomeStringCollection();
String[] strings = collection.toArray(new String[collection.size()]);
Arrays.sort(strings, defaultComparator);
List<String> sortedStrings = Arrays.asList(strings);
Collection<String> collection = getSomeStringCollection();
List<String> list = new ArrayList(collection);
Collections.sort(list, defaultComparator);
collection = list; // if you wish
목록 유형 :
List<String> list = getSomeStringList();
Collections.sort(list, defaultComparator);
세트 유형 :
Set<String> set = getSomeStringSet();
// Than steps like in 'For Collection type' section or use java.util.TreeSet
// TreeSet sample:
// Sorted using java.lang.Comparable.
Set<String> naturalSorted = new TreeSet(set);
Set<String> set = getSomeStringSet();
Set<String> sortedSet = new TreeSet(defaultComparator);
sortedSet.addAll(set);
Java 8 버전. 이 java.util.List#sort(Comparator<? super E> c)
방법은
List<String> list = getSomeStringList();
list.sort(defaultComparator);
또는
List<String> list = getSomeStringList();
list.sort((String o1, String o2) -> o1.compareTo(o2));
또는 Comparable을 구현하는 유형의 경우 :
List<String> list = getSomeStringList();
list.sort(String::compareTo);
Comparable을 구현하지 않는 클래스가 있지만 여전히 필드 또는 메서드에서 정렬하려는 경우 약간 다른 예가 있습니다.
Collections.sort(allMatching, new Comparator<ClassOne>() {
@Override public int compare(final ClassOne o1, final ClassOne o2) {
if (o1.getMethodToSort() > o2.getMethodToSort()) {
return 1;
} else if (o1.getMethodToSort() < o2.getMethodToSort()) {
return -1;
}
return 0;
}
});
compareTo()
은 이미 수행하는 작업을 정확히 수행 합니다.
Comparator
인터페이스를 구현해야합니다 .
예:
public class CustomComparator implements Comparator<CustomObject>
{
@Override
public int compare(CustomObject o1, CustomObject o2) {
return o1.getId().compareTo(o2.getId());
}
}
그런 다음 Collections 클래스 Collections.sort()
메서드를 사용할 수 있습니다 .
Collections.sort(list, new CustomComparator());
customObject에 Comparable 인터페이스를 구현하십시오 .
SortedSet 및 Comparator. 비교기는 id 필드를 존중해야 합니다.
정렬 목적으로 Java Custom Class를 사용할 수 있습니다.
명확하게 말하면 Collection.sort (list, compartor)는 아무것도 반환하지 않으므로 이와 같은 list = Collection.sort(list, compartor);
오류가 발생합니다 (void는 [list type]로 변환 할 수 없음).Collection.sort(list, compartor)