Array-Liste alphabetisch sortieren in BlueJ?
Ich möchte eine Array-Liste mit CDs, die mit Titel, Autor und Erscheinungsjahr gespeichert werden, alphabetisch (nach Titel) sortieren (das Programm soll unabhängig vom Inhalt ablaufen. Es soll also nicht ein gespeicherter Titel im Programm benutz werden). In der if-Anweisung wird mir beim > eine Fehlermeldung angezeigt, was ja sinnvoll ist, da ein String ja nicht > als ein andere sein kann. Ich weiß allerdings nicht, was ich stattdessen schreiben soll.
Vielen Dank schonmal im Voraus.
public void sortiernNachTitel()
{
cd temp;
for(int i=1; i<cdanzahl; i++)
{
for(int j=0; j<cdanzahl-i; j++)
{
if(cdSammlung[j].gibTitel()>cdSammlung[j+1].gibTitel())
{
temp=cdSammlung[j];
cdSammlung[j]=cdSammlung[j+1];
cdSammlung[j+1]=temp;
}
}
}
for( int a=0; a<cdanzahl; a++)
{
System.out.println(cdSammlung[a].gibTitel());
System.out.println(cdSammlung[a].gibInterpret());
System.out.println(cdSammlung[a].gibErscheinungsjahr());
}
}
2 Antworten
Schau dir die mit Java 8 eingeführten Streams an.
https://mkyong.com/java8/java-8-how-to-sort-list-with-stream-sorted/
Damit erreichst du genau, was du machen willst, in nur einer Zeile ;-)
Interessant wird es bei Punkt 2 für dich.
Der Vorteil bei den Streams, du kannst am Schluss einfach
.collect(Collectors.toList())
machen, um ganz einfach eine sortierte Liste zurück zu bekommen.
Ich habe dir hier mal was vorbereitet. Konnte gestern nichts machen, da ich nicht zu Hause war.
public List<Titel> gibAlleTitelNachNameSortiert(boolean absteigend) {
return titelAufCD
.values()
.stream()
.sorted((t1,t2) -> {
return (absteigend ? t2.getName().compareTo(t1.getName()) : t1.getName().compareTo(t2.getName()));
})
.collect(Collectors.toList());
}
Du kannst dir das hier auch nochmal anschauen, habe dir auf meinem GitLab Repo ein Projekt angelegt. https://gitlab.com/Xearox/cd-frage-gutefrage/-/blob/master/src/CD.java
Wenn du willst, kann ich die Main auch soweit fertig machen, dass man das Programm ausführen kann.
Mit meinem Code Snippet kannst du die Titel Namen auf und abwärts sortieren.
Dazu rufst du einfach auf
gibAlleTitelNachNameSortiert(false); // für aufwärts
gibAlleTitelNachNameSortiert(true); // für abwärts
Vielen Dank :) Ich konnte das Problem lösen
Ja, vielen Dank, dass hat mir extrem weiter geholfen :)
Das freut mich =) Bekomm ich dann auch den Stern? *lieb frag* :-) Du kannst mich auch als Freund hinzufügen, falls du mal öfters Hilfe brauchst!
Natürlich kann ein String größer als ein anderer sein. Nur muss man das in Java etwas umständlicher formulieren:
if ( cdSammlung[j].gibTitel().compareTo(cdSammlung[j+1].gibTitel()) > 0 )
(siehe Java-Referenz)
Ok danke, das werde ich mir jetzt mal angucken :)