Sammlungen Sortieren nicht akzeptiert wird von 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 ist nicht wie die add-Anweisung, die folgt, nämlich: Die Methode add (SortNames.CelebrityNamesFile) in den Typ ArrayList(SortNames.CelebrityNamesFile)gilt nicht für die Argumente (String)
else
{
myCelebrityList.add( oneName );
}
}
celebrityNamesFile.close();
$
Und dann ist es auch nicht, wie meine Art Anweisung, nämlich:
Gebunden mismatch: Die generische Methode sort(List T), Typ-Sammlungen ist nicht anwendbar für die Argumente (ArrayList (SortNames.CelebrityNamesFile)). Der abgeleitete Typ SortNames.CelebrityNamesFile ist kein Gültiger Ersatz für die begrenzten parameter (T extends Vergleichbar? super-T))
Collections.sort( myCelebrityList );
System.out.println( myCelebrityList );
Collections.sort( myCelebrityList, new CelebrityNamesFile.CompareLastName() );
System.out.println( myCelebrityList );
}
}
}
Was mache ich falsch? Ich habe gelesen, dass viele Beiträge hier gelesen haben, die Java-docs in Bezug Komparator, gelesen haben Java-tutorials in Bezug auf Komparator. Head First Java Ivor Horton ' s beginning Java 7. Immer noch ahnungslos.
Den Zweck des Programms zu Lesen ist, Namen aus einer txt-Datei, fügen Sie Sie zur arraylist, drucken Sie die arraylist in Ihrer natürlichen Reihenfolge Sortieren der arraylist per Nachname, drucken Sie die Liste erneut.
import
s, Sie nur obecure den code.) Wenn Sie längere Prosa, beziehen sich auf die Zeilen, die Sie darauf hingewiesen zuvor.
InformationsquelleAutor Armando Moncada | 2012-07-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für das erste problem, das problem ist ziemlich einfach.
oneName
ist einString
, undmyCelebrityList
ist eine Sammlung vonCelebrityNamesFile
- was bedeutet, dass Sie nur das hinzufügen von Objekten zu der Auflistung des TypsCelebrityNamesFile
.Für das zweite Problem, dein problem ist, dass die
CelebrityNamesFile
Klasse implementiert nicht dieComparable
- Schnittstelle. Die Sortierung erfordert, dass eine Anordnung implementiert ist, für die Liste-element-Typ, z.B. durch die UmsetzungComparable
für die Klasse oder für die Bereitstellung einesComparator
zu densort
.Comparable<CelebrityNamesFile>
- seit 1.5,Comparable
eingegebenJa, das ist eine Methode, sondern prüfen, die OP hat bereits ein Komparator.
Ich habe bemerkt, dass, aber ich habe das Gefühl, dass die einfach sagen, ist jemand, verwenden Sie die explizite Komparator-version die Funktion nicht, erklären die Fehlermeldung 🙂
InformationsquelleAutor alyu
Zur ersten Frage, die Sie versuchen, hinzufügen, ein
String
in eineList<CelebrityNamesFile>
Instanz. Sie sollen verwenden, den String zu erstellenCelebrityNamesFile
- Instanz, und fügen Sie diese Instanz zur Liste:Zur zweiten Frage versuchen
Als @alyu Punkte, die
CelebrityNamesFile
Klasse implementieren muss, dieComparable
Schnittstelle zur Arbeit mit dem code, den du bist der Buchung, aber Sie könnten auch eineComparator<CelebrityNamesFile>
Instanz (und Sie haben bereits dieCompareLastName
Klasse implementiert).Mehr dazu:
InformationsquelleAutor Luiggi Mendoza
String
(das ObjektoneName
), um eine Liste derCelebrityNamesFile
s. Sie müssen es irgendwie schaffen einCelebrityNamesFile
aus diesemString
.Collections.sort()
funktioniert nur auf Objekte, dieComparable
wenn Sie nicht ausdrücklich pass-einen Komparator. Versuchen Sie dies:Collections.sort(myCelebrityList, new CelebrityNamesFile.CompareLastName());
InformationsquelleAutor millimoose
Sammlung
myCelebrityList
ist der TypCelebrityNamesFile
und das bedeutet, es kann nur akzeptieren, Instanzen dieser Klasse. Müssen Sie erstellen eine Instanz vonCelebrityNamesFile
und fügt es der Sammlung. DieCollections
nicht akzeptieren, Ihre Sammlung, weil Sie KlasseCelebrityNamesFile
implementiert nicht dieComparator
- Schnittstelle. Sie müssen Ihren pass comparator-Instanz, dieCollections.sort()
als zweiten parameter.InformationsquelleAutor devang
Den
Comparator
umgesetztCompareLastName
Klasse versetzt werden können, die außerhalb desSortNames
Klasse, oder zumindest außerhalb derCelebrityNamesFile
Klasse. Ich hatte das exakt gleiche Problem, bis ich die Klasse, die meine Komparator außerhalb meiner Klasse Objekt. Nachdem ich dies getan habe, das Programm arbeitete perfekt. Hier ein Beispiel von meinem code mit Kommentaren, wenn es hilft.Hinweis: Meine Antwort ist ein Jahr nach dem ursprünglichen post, aber hoffentlich wird es helfen, jemand, der diese Website besucht, um Hilfe.
InformationsquelleAutor Mr. Pickles