Java en utilisant le Comparateur de .reverseOrder() mais avec un intérieur de classe
Je suis entrain de créer un programme simple pour apprendre le Java Comparateur de classe. J'ai trié un Arraylist
dans l'ordre, mais maintenant, je veux trier la liste dans l'ordre décroissant, mais éprouve des difficultés dans l'endroit où l'appel de la .reverseOrder()
méthode que j'ai utilisé un intérieur classe qui implémente Comparator<Song>
(chanson une chanson de la classe qui abrite des accesseurs et des mutateurs).
Voici mon SongSort
classe qui abrite le processus de tri, etc.;
import java.util.*;
import java.io.*;
public class SongSort
{
ArrayList<Song> songList = new ArrayList<Song>();
public void main(String[] args)
{
new SongSort().go();
}
class ArtistCompare implements Comparator<Song>
{
public int compare(Song one, Song two)
{
return one.getRating().compareTo(two.getRating());
}
}
public void go()
{
getSongs();
System.out.println(songList);
//Collections.sort(songList);
System.out.println(songList);
ArtistCompare artistCompare = new ArtistCompare();
Collections.sort(songList, artistCompare);
System.out.println(songList);
}
public void getSongs()
{
try{
File file = new File("SongListMore.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while((line = reader.readLine()) != null)
{
addSong(line);
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
public void addSong(String lineToParse)
{
String [] tokens = lineToParse.split("/");
Song nextSong = new Song(tokens[0], tokens[1], tokens[2], tokens[3]);
songList.add(nextSong);
}
}
Et voici mon simple Song
classe;
public class Song //implements Comparable<Song>
{
private String title;
private String artist;
private String rating;
private String bpm;
public Song(String t, String a, String r, String b)
{
title = t;
artist = a;
rating = r;
bpm = b;
}
public String getTitle()
{
return title;
}
public String getArtist()
{
return artist;
}
public String getRating()
{
return rating;
}
public String getBpm()
{
return bpm;
}
public String toString()
{
return ("Title : " + title + "," + " Artist : " + artist + " Rating : " + rating);
}
}
Quelqu'un peut-il m'aider à comprendre où je vais appeler la reverseOrder()
méthode dans le SongSort
classe, comme il ne compile pas?
Vous devez vous connecter pour publier un commentaire.
Modifier Juillet 2015
Que cette réponse obtient encore un peu d'attention, voici une petite mise à jour:
Avec Java SE 8 il est de plus en plus facile de créer une inversion de comparateur:
Et vous pouvez aussi, bien sûr, utiliser les cours d'eau du cadre:
Une façon de mettre en œuvre un ordre inverse comparateur de mettre en place un Compartor-Délégué qui inversent le comparateur de résultat (par modification de l'ordre).
La seule chose que vous devez faire est d'utiliser ce délégué.
Par exemple:
Prenons un exemple simple, nous avons une Personne de la classe avec deux champs nom de l'âge et nous voulons trier une collection existante de personnes en fonction de leur âge supposons donc que nous avons une Personne de la classe avec un constructeur et d'ajouter les personnes dans la liste, puis de les trier unsing la méthode de tri de la collecte :
et ce, le impelemtation de Agecomparable :
le truc, c'est pour plusieurs le retour de la méthode avec -1 de sorte que le résultat final sera inversé:
classe AgeComparator implémente Comparateur{
alors maintenant, nous pouvons obtenir un résultat inversé :
return -1 *this.delegate.compare(a,b);
Si vous avez besoin d'utiliser un Comparateur qui annule la commande en cours, il suffit de retourner un valeur négative dans le
compare
méthode.ComparatorInverse
appelleracompare()
dans une partie fixe et de manière prévisible avec toujourslhs < rhs
. Puis de retour -1 renverse cet ordre. Mais si vous insérez vos éléments (dire des nombres au hasard ou de l'algorithme de tri des changements, il ne sera plus à même de produire les meilleurs résultats en termes de naturel de tri oder quelle que soitObject
est.