So erstellen Sie diese java-Komparator

Habe ich diese Klasse:

public class Test {

  private int    priority;
  private String desciption;
...
}

und ich habe diese arraylist:

Priority: 1, Description: C2
Priority: 2, Description: C1
Priority: 3, Description: C1
Priority: 4, Description: C2

Möchte ich dieses Ergebnis:

Priority: 1, Description: C2
Priority: 4, Description: C2
Priority: 2, Description: C1
Priority: 3, Description: C1

Wie ich haben, dies zu tun mit Komparator?
Danke!

EDIT:

Ich die Antwort auf all Ihre Fragen:

@retro: Nein. Beschreibung ist eine Zeichenfolge, die, ohne ein bestimmtes format. es kann leer sein, auch.

@tobias_k: erste "Gruppe" von Beschreibung und als Bestellung mit Priorität. Priorität ist nicht immer gleich.

@user270349:

dies ist mein Versuch:

int result = 0;
if (o1.getPriority() < o2.getPriority()) result = -1;
else if (o1.getPriority() > o2.getPriority()) result = 1

result *= o1.getDescription().compareTo(o2.getDescription());

return result;

EDIT 2:

anderen Eingabe - /Ausgabe-Beispiel:

und ich habe diese arraylist:

Priority: 1, Description: C2
Priority: 2, Description: C3
Priority: 3, Description: C1
Priority: 4, Description: C2

Möchte ich dieses Ergebnis:

Priority: 1, Description: C2
Priority: 4, Description: C2
Priority: 2, Description: C3
Priority: 3, Description: C1

DIES IST MEINE LÖSUNG:

            List<Test> testList = new ArrayList<>();
    testList.add(new Test(4, "C2"));
    testList.add(new Test(2, "C3"));
    testList.add(new Test(3, "C1"));
    testList.add(new Test(1, "C2"));


    Comparator<Test> comparator = new Comparator<Test>() {

        @Override
        public int compare(Test o1, Test o2) {
            int res = o1.getDescription().compareTo(o2.getDescription());
            if (res == 0)
                return o1.getPriority() < o2.getPriority() ? -1 : 1;
            else
                return res;
        }
    };

    Collections.sort(testList, comparator);


    List<String> valoriInseriti = new ArrayList<>();
    List<Test> grouping = new ArrayList<>();
    for (Test t : testList) {
        if (!valoriInseriti.contains(t.getDescription())) {
            valoriInseriti.add(t.getDescription());
            grouping.add(t);
        }
    }


    comparator = new Comparator<Test>() {

        @Override
        public int compare(Test o1, Test o2) {
            return o1.getPriority() < o2.getPriority() ? -1 : 1;
        }
    };

    Collections.sort(grouping, comparator);


    Collections.sort(testList, comparator);

    List<Test> output = new ArrayList<>();
    for (Test t1 : grouping) {
        for (Test t2 : testList) {
            if (t2.getDescription().equals(t1.getDescription())) {
                output.add(t2);
            }
        }
    }

    System.out.println("==============================");
    for (Test t : output)
        System.out.println(t);
Tun die Beschreibungen haben immer das gleiche format? Immer einen char, eine Ziffer? Kann es noch andere chars, mehr stellen?
Beschreiben Sie bitte, wie Sie möchten, dass der Komparator arbeiten: in Erster Linie durch Beschreibung, absteigend, und Sekundär nach Priorität aufsteigend? Auch, was haben Sie versucht, und was ist das problem?
Was haben Sie versucht? Was verstehst du nicht über die Komparator-Schnittstelle in der javadoc? Was ist die Anforderung (in Englisch, nicht nur ein Beispiel). -1
siehe mein edit! danke!!!
Ich denke, dein code ist richtig, aber nicht mit den Anforderungen übereinstimmen. Ich glaube, IMHO, dass Sie nicht verstehen die Anforderungen. Vielleicht müssen Sie die Gruppe durch die Beschreibung und Sortieren Sie die Gruppen, indem Sie die höchste Priorität in der Gruppe und dann Sortieren innerhalb der Gruppe nach Priorität zu? Würde ich nicht tun, nur die Sortierung mit comparator. Ich würde darstellen, wie Objekte den Gruppen selbst.

InformationsquelleAutor Fabio Mignogna | 2013-12-05

Schreibe einen Kommentar