Ich versuche, eine Methode zu erstellen, die eine Liste, indem sortiert:Sortiere einen Java-Stream mit einem nicht-gesamten Sortierkriterium.
private List<Processor> getByPriority(){
return processors.stream().sorted(new ProcessorComparator()).collect(Collectors.toList());
}
Aber ich lese in der Comprator javadoc, die Bedürfnisse vergleichen insgesamt Ordnungsrelation sein. Das heißt, dass keine zwei Komparatoren die gleiche Priorität haben müssen, wenn sie nicht gleich sind. Dies ist möglicherweise nicht der Fall.
Ich habe versucht, diesen einfachen Komparator:
public class ProcessorComparator implements Comparator<TTYMessageProcessor<?>>{
@Override
public int compare(Processor processor1 , Processor processor2) {
return processor1.getPriority() - processor2.getPriority();
}
}
Natürlich konnte ich den Prozessor vergleichbar machen, aber ich möchte Änderungen an alle proccessors vermeiden. Gibt es keine Möglichkeit, sie mit Streams zu sortieren? Als Alternative könnte ich meine eigene Methode schreiben oder einen komplexeren Komparator erstellen, aber ich bin überrascht, dass es keine elegantere Lösung gibt.
Wenn Sie nicht kümmern sich um die Bestellung von Prozessoren mit gleicher Priorität, das ist eine vollkommen feine Komparator als die "Gleichheit" in diesem Fall als die Gleichheit der Prozessorpriorität definiert ist, nicht die Prozessoren selbst – BeyelerStudios
Es wird nicht sein kohärent mit der equals-Methode nach javadoc. Aber ich bin mir der Konsequenzen nicht wirklich sicher. Ich möchte nur sicherstellen, dass der Stream es nicht schon als vorhanden ansieht und lösche es. Auf der anderen Seite macht es mir nichts aus, wenn Prozessoren mit der gleichen Reihenfolge zufällig sortiert werden. Eines Tages erscheint Pc (p = 2) vor Pb (p = 2) und umgekehrt. Ihr Satz "Gleichheit der Prozesspriorität gegen Gleichheit der Objekte wurde erleuchtet" – borjab
Ich würde Sie verwenden Java 8, das ist viel komplizierter als es sein muss: Verwenden Sie 'Comparator.comparingInt (Prozessor :: getPriority)'. –