Les Collections de sorte de ne pas être acceptées par Eclipse
import java.io.BufferedReader;
import java.util.Collections;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import com.javaranch.common.TextFileIn;
public class SortNames
{
public static class CelebrityNamesFile
{
public String firstName;
public String lastName;
public static class CompareLastName implements Comparator< CelebrityNamesFile >
{
@Override
public int compare( CelebrityNamesFile o1, CelebrityNamesFile o2 )
{
return o2.lastName.compareTo( o1.lastName );
}
}
public static void main( String[ ] args ) throws IOException
{
ArrayList< CelebrityNamesFile > myCelebrityList;
myCelebrityList = new ArrayList< CelebrityNamesFile >();
TextFileIn celebrityNamesFile = new TextFileIn( "celebrityNamesFile.txt" );
boolean doneReadingCelebrityNames = false;
while ( ! doneReadingCelebrityNames )
{
String oneName = celebrityNamesFile.readLine();
if ( oneName == null )
{
doneReadingCelebrityNames = true;
}
$
Eclipse n'aime pas les ajouter instruction qui suit, à savoir: La méthode add (SortNames.CelebrityNamesFile) dans le type ArrayList(SortNames.CelebrityNamesFile)n'est pas applicable pour les arguments (String)
else
{
myCelebrityList.add( oneName );
}
}
celebrityNamesFile.close();
$
Et puis il n'aime pas mon sorte de déclaration, à savoir:
Lié incompatibilité: Le générique de la méthode de tri(Liste T) de type de Collections n'est pas applicable pour les arguments (ArrayList (SortNames.CelebrityNamesFile)). Le type inféré SortNames.CelebrityNamesFile n'est pas un substitut valable pour la délimitée paramètre (T extends Comparable(? super T))
Collections.sort( myCelebrityList );
System.out.println( myCelebrityList );
Collections.sort( myCelebrityList, new CelebrityNamesFile.CompareLastName() );
System.out.println( myCelebrityList );
}
}
}
Ce que je fais mal? J'ai lu beaucoup de posts ici, j'ai lu les Java docs concernant comparateur, avoir lu Java tutoriels concernant comparateur. La tête la Première, Java, Ivor Horton début de Java 7. Toujours désemparés.
Le but du programme est de lire les noms à partir d'un fichier txt, les ajouter à une liste de tableaux, d'imprimer la liste de tableaux dans son ordre naturel, trier la liste de tableaux par nom, imprimer la liste de nouveau.
import
s, ils ont juste obecure le code). Si vous avez besoin de plus de la prose, reportez-vous aux lignes vous l'avez souligné précédemment.OriginalL'auteur Armando Moncada | 2012-07-18
Vous devez vous connecter pour publier un commentaire.
Pour la première question, le problème est assez simple.
oneName
est unString
, etmyCelebrityList
est une collection deCelebrityNamesFile
- ce qui signifie que vous pouvez uniquement ajouter des objets à la collecte de typeCelebrityNamesFile
.Pour la deuxième question, votre problème est que le
CelebrityNamesFile
classe n'implémente pas laComparable
interface. Le tri exige qu'une commande est mis en œuvre pour la liste type d'élément, par exemple par la mise en œuvre deComparable
pour la classe ou de fournir unComparator
à lasort
.Comparable<CelebrityNamesFile>
- depuis la version 1.5,Comparable
est tapéOui, c'est une méthode, mais de vérifier que l'opération a déjà mis en place un Comparateur.
J'ai remarqué que, mais j'ai l'impression que le simple fait d'en parler à l'utilisation de l'explicite comparateur de version de la fonction n'a pas d'expliquer le message d'erreur 🙂
OriginalL'auteur alyu
Pour la première question, vous essayez d'ajouter un
String
dans unList<CelebrityNamesFile>
instance. Vous devriez vous utilisez la Chaîne pour créer unCelebrityNamesFile
instance et d'ajouter cette instance à votre liste:Pour la deuxième question, essayez de
@Alyu points, le
CelebrityNamesFile
les besoins de la classe pour mettre en œuvre lesComparable
interface de travailler avec le code que vous publiez, mais vous pouvez aussi ajouter unComparator<CelebrityNamesFile>
instance (et vous avez déjà laCompareLastName
de la classe qui l'implémente).Plus à ce sujet:
OriginalL'auteur Luiggi Mendoza
String
(l'objetoneName
) à une liste deCelebrityNamesFile
s. Vous devez en quelque sorte créer unCelebrityNamesFile
de ceString
.Collections.sort()
ne fonctionne que sur les objets qui sontComparable
si vous n'avez pas explicitement passer un comparateur. Essayez plutôt ceci:Collections.sort(myCelebrityList, new CelebrityNamesFile.CompareLastName());
OriginalL'auteur millimoose
La collection
myCelebrityList
est de typeCelebrityNamesFile
ce qui signifie qu'il ne peut accepter que les instances de cette classe. Vous devez créer une instance deCelebrityNamesFile
et l'ajouter à la collection. LeCollections
l'habitude d'accepter votre collection, car vous classeCelebrityNamesFile
ne pas mettre en œuvre laComparator
interface. Vous avez besoin de passer votre comparateur instance à laCollections.sort()
comme deuxième paramètre.OriginalL'auteur devang
La
Comparator
mis en œuvre dans leCompareLastName
classe peuvent être placés à l'extérieur de laSortNames
classe, ou au moins en dehors de laCelebrityNamesFile
classe. J'ai eu exactement le même problème jusqu'à ce que j'ai mis la classe qui implémente mon Comparateur en dehors de ma classe de l'objet. Après j'ai fait cela, le programme a fonctionné parfaitement. Voici un exemple de mon code avec des commentaires si ça aide.Note: Ma réponse est un an après le post original, mais j'espère qu'il pourra aider tous ceux qui visite ce site pour obtenir de l'aide.
OriginalL'auteur Mr. Pickles