Eclipse不接受集合排序

Arm*_*ada 4 java sorting collections comparator

    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;
                 }
Run Code Online (Sandbox Code Playgroud)

$ Eclipse不喜欢下面的add语句,即:类型ArrayList(SortNames.CelebrityNamesFile)中的方法add(SortNames.CelebrityNamesFile)不适用于参数(String)

                 else
                 {
                     myCelebrityList.add( oneName );
                 }
            }
            celebrityNamesFile.close();
Run Code Online (Sandbox Code Playgroud)

$然后它不喜欢我的排序语句,即: 绑定不匹配:类型集合的泛型方法排序(列表T)不适用于参数(ArrayList(SortNames.CelebrityNamesFile)).推断类型SortNames.CelebrityNamesFile不是有界参数的有效替代(T扩展Comparable(?super T))

            Collections.sort( myCelebrityList );
            System.out.println( myCelebrityList );

            Collections.sort( myCelebrityList, new CelebrityNamesFile.CompareLastName() );
            System.out.println( myCelebrityList );
}
}
Run Code Online (Sandbox Code Playgroud)

}

我究竟做错了什么?我在这里阅读了很多帖子,阅读了有关比较器的Java文档,阅读了有关比较器的Java教程.Head First Java,Ivor Horton开始使用Java 7.仍然无能为力.

该程序的目的是从txt文件中读取名称,将它们添加到arraylist,按照其自然顺序打印arraylist,按姓氏对arraylist进行排序,再次打印列表.

小智 12

对于第一个问题,问题非常简单.oneName是一个String,并且myCelebrityList是 - 的集合CelebrityNamesFile- 这意味着您只能将对象添加到类型集合中CelebrityNamesFile.

对于第二个问题,您的问题是CelebrityNamesFile该类没有实现该Comparable接口.排序要求的排序是针对列表元素类型,例如,通过执行实现Comparable为类或提供Comparatorsort.