[java] Java 컬렉션 정렬

Java 컬렉션이 있습니다.

Collection<CustomObject> list = new ArrayList<CustomObject>();

CustomObjectid필드는 현재 표시 목록 전에 그하여이 컬렉션을 정렬 할 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)

JDK 8에서는 구문이 훨씬 간단합니다.

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;
  }
});


답변

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 인터페이스를 구현하십시오 .


답변

많은 정답이 있지만이 답을 찾지 못했습니다. 컬렉션은 정렬 할 수 없으며 반복 만 할 수 있습니다.

이제 그것들을 반복하고 새로운 정렬 된 something. 여기에 대한 답변을 따르십시오.


답변

Comparator 방법입니다

참조