Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren
Hallo,
Ich stehe momentan vor dem Problem das ich eine Liste aus Listen aus Objekten gerne sortieren würde, machen kann ich dies anhand von der Summe von Preisen welche die Objekte habe.
ich summiere also alle preise aller Objekte in einer Liste in meiner Oberliste zusammen, diese summen habe ich mir nochmal in einer separaten Array List gespeichert welche jetzt gleich lang ist wie meine Hauptliste und momentan auch gleich sortiert.
Nun will ich das meine Hauptliste anhand der summen sortiert wird so das die kleinste zahl oben und die größte unten ist.
hierbei kann es auch vorkommen das zahlen doppelt vorkommen aber das ist erstmal nur eine Anmerkung da ich kurz über Maps nachgedacht hatte und gemerkt hatte das dies nicht klappen wird.
Habt ihr eine Idee wie ich eine Liste sozusagen mit werten einer anderen Liste sortieren kann?
Alternativ zu deinem Weg mit der extra Liste gibt es zwei Wege, bei denen du das Problem einfach gar nicht hast:
Beim Liste sortieren einfach jedes Mal den Preis berechnen, (hat zwar den Nachteil, dass du bei jedem Vergleich den Preis ausrechnen musst, das kannst Du aber erstmal vernachlässigen).
Oder, was der deutlich sinnvollere Weg ist, nicht direkt mit Listen sondern sinnvollen Objekten arbeiten - die "inneren Listen" könnten also z.B. einfach "Rechnungen" sein, und eine Rechnung hat einen Liste von Objekten und einen Gesamtpreis. Das ganze Modell ist dann sowohl aussagekräftig (bei Liste von Rechnungen weiß jeder, worum es geht), der Nachteil der wiederholten Preisberechnung ist weg (da der Preis für eine "Rechnung" fest steht)...
Alternativ zu deinem Weg mit der extra Liste gibt es zwei Wege, bei denen du das Problem einfach gar nicht hast:
Beim Liste sortieren einfach jedes Mal den Preis berechnen, (hat zwar den Nachteil, dass du bei jedem Vergleich den Preis ausrechnen musst, das kannst Du aber erstmal vernachlässigen).
Oder, was der deutlich sinnvollere Weg ist, nicht direkt mit Listen sondern sinnvollen Objekten arbeiten - die "inneren Listen" könnten also z.B. einfach "Rechnungen" sein, und eine Rechnung hat einen Liste von Objekten und einen Gesamtpreis. Das ganze Modell ist dann sowohl aussagekräftig (bei Liste von Rechnungen weiß jeder, worum es geht), der Nachteil der wiederholten Preisberechnung ist weg (da der Preis für eine "Rechnung" fest steht) und du sparst das interessante Konstrukt mit der zweiten Liste.
Alternativ zu deinem Weg mit der extra Liste gibt es zwei Wege, bei denen du das Problem einfach gar nicht hast:
Beim Liste sortieren einfach jedes Mal den Preis berechnen, (hat zwar den Nachteil, dass du bei jedem Vergleich den Preis ausrechnen musst, das kannst Du aber erstmal vernachlässigen).
Oder, was der deutlich sinnvollere Weg ist, nicht direkt mit Listen sondern sinnvollen Objekten arbeiten - die "inneren Listen" könnten also z.B. einfach "Rechnungen" sein, und eine Rechnung hat einen Liste von Objekten und einen Gesamtpreis. Das ganze Modell ist dann sowohl aussagekräftig (bei Liste von Rechnungen weiß jeder, worum es geht), der Nachteil der wiederholten Preisberechnung ist weg (da der Preis für eine "Rechnung" fest steht) und du sparst das interessante Konstrukt mit der zweiten Liste.
Vielen dank habe es jetzt in eine Klasse routCost umgewandelt da ich rechnung noch wo anders brauche und es funktioniert auch wenn ich noch nicht ganz durch das sortieren selbst durch steige xD
Java:
public class RoutCost {
double totalCost;
List<Flight> rout;
public RoutCost(double totalCost, List<Flight> rout) {
this.totalCost = totalCost;
this.rout = rout;
}
public double getTotalCost() {
return totalCost;
}
public List<Flight> getRout() {
return rout;
}
}
Java:
List<List<Flight>> routes = findRoutes();
List<RoutCost> routCosts = new ArrayList<>();
double sum;
for (List<Flight> route : routes) {
sum = 0;
for (Flight flight : route) {
sum += flight.getPrize();
}
routCosts.add(new RoutCost(sum, route));
}
routCosts.sort(Comparator.comparingDouble(RoutCost::getTotalCost));
wenns dir nicht ausmacht weißt du was diese : : da hinten beim sorten bzw comparen genau machen ? Danke
Comparator.comparingDouble erwartet einen Parameter, der aus den zu sortierenden Elementen ein double "macht". Das könnte also auch eine Lambda Expression sein. Um aus einem Element das gewünschte Double zu bekommen, wäre dies ein e -> e.getTotalCost()