sorting collections - Java-Sammlung sortieren




comparator list (12)

Ich habe eine Java-Sammlung:

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

CustomObject hat jetzt ein id Feld vor der Anzeigeliste. Ich möchte diese Sammlung nach dieser id sortieren.

Kann ich das irgendwie machen?


Answers

Ab Java 8 können Sie es nun mit einem Stream mit einem Lambda tun:

list.stream().sorted(Comparator.comparing(customObject::getId))
             .foreach(object -> System.out.println(object));

Sie sollten die Comparator Schnittstelle implementieren.

Beispiel:

public class CustomComparator implements Comparator<CustomObject> 
{
    @Override
    public int compare(CustomObject o1, CustomObject o2) {
        return o1.getId().compareTo(o2.getId());
    }
}

Dann können Sie die Collections-Klassen Collections.sort() -Methode verwenden:

Collections.sort(list, new CustomComparator());

Viele richtige Antworten, aber ich habe diese nicht gefunden: Sammlungen können nicht sortiert werden, Sie können sie nur durchlaufen.

Jetzt können Sie über sie iterieren und ein neues sortiertes something erstellen. Befolgen Sie die Antworten hier dafür.


Sie können Java Custom Class zum Sortieren verwenden.


SortedSet und Komparator. Der Komparator sollte das ID- Feld berücksichtigen .



Verwenden Sie einen Comparator :

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

Wenn CustomObject implementiert, verwenden Sie einfach Collections.sort(list)

Mit JDK 8 ist die Syntax viel einfacher.

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

Viel einfacher

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

Einfachste

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

Offensichtlich kann der ursprüngliche Code auch für JDK 8 verwendet werden.


Ein etwas anderes Beispiel wäre, wenn Sie eine Klasse haben, die Comparable nicht implementiert, Sie aber dennoch nach einem Feld oder einer Methode sortieren möchten.

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

Implementieren Sie die Comparable für Ihr customObject.


Verwenden Sie sort .

Du musst das nur tun:

Alle Elemente in der Liste müssen die Vergleichsschnittstelle implementieren.

(Oder verwenden Sie die Version darunter, wie andere bereits sagten.)


Mit Java 8 haben Sie mehrere Möglichkeiten, Methodenreferenzen und den integrierten comparing kombinieren:

import static java.util.Comparator.comparing;

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

Collections.sort(list, comparing(CustomObject::getId));
//or
list.sort(comparing(CustomObject::getId));

Ich habe gerade Multi-Level-Sortierung basierend auf benutzerdefinierten Anforderungen durchgeführt.

// sortiere die Werte

    [arrItem sortUsingComparator:^NSComparisonResult (id a, id b){

    ItemDetail * itemA = (ItemDetail*)a;
    ItemDetail* itemB =(ItemDetail*)b;

    //item price are same
    if (itemA.m_price.m_selling== itemB.m_price.m_selling) {

        NSComparisonResult result=  [itemA.m_itemName compare:itemB.m_itemName];

        //if item names are same, then monogramminginfo has to come before the non monograme item
        if (result==NSOrderedSame) {

            if (itemA.m_monogrammingInfo) {
                return NSOrderedAscending;
            }else{
                return NSOrderedDescending;
            }
        }
        return result;
    }

    //asscending order
    return itemA.m_price.m_selling > itemB.m_price.m_selling;
}];

https://sites.google.com/site/greateindiaclub/mobil-apps/ios/multilevelsortinginiosobjectivec





java sorting collections