Ordenar colección Java

Resuelto Makky asked hace 13 años • 15 respuestas

Tengo una colección de Java:

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

CustomObjecttiene un idcampo ahora antes de mostrar la lista. Quiero ordenar esta colección por eso id.

¿Hay alguna manera de que pueda hacer eso?

Makky avatar Aug 05 '11 21:08 Makky
Aceptado

Utilice un comparador :

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

Además, si CustomObjectse implementa Comparable, entonces simplemente useCollections.sort(list)

Con JDK 8 la sintaxis es mucho más sencilla.

List<CustomObject> list = getCustomObjectList();
Collections.sort(list, (left, right) -> left.getId() - right.getId());
System.out.println(list);

Mucho más simple

List<CustomObject> list = getCustomObjectList();
list.sort((left, right) -> left.getId() - right.getId());
System.out.println(list);

Más simple

List<CustomObject> list = getCustomObjectList();
list.sort(Comparator.comparing(CustomObject::getId));
System.out.println(list);

Obviamente, el código inicial también se puede utilizar para JDK 8.

Kowser avatar Aug 05 '2011 14:08 Kowser

La pregunta es: "Ordenar colección". Entonces no puedes usar Collections.sort(List<T> l, Comparator<? super T> comparator).

Algunos consejos:

Para tipo de colección:

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

Para tipo de lista:

List<String> list = getSomeStringList();
Collections.sort(list, defaultComparator);

Para tipo de conjunto:

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

Versión Java 8. hay java.util.List#sort(Comparator<? super E> c)metodo

List<String> list = getSomeStringList();
list.sort(defaultComparator);

o

List<String> list = getSomeStringList();
list.sort((String o1, String o2) -> o1.compareTo(o2));

o para tipos que implementan Comparable:

List<String> list = getSomeStringList();
list.sort(String::compareTo);
Aliaksei Yatsau avatar May 14 '2015 11:05 Aliaksei Yatsau