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不喜欢下面的add语句:ArrayList(SortNames.CelebrityNamesFile)类型的add(SortNames.CelebrityNamesFile)方法不适用于参数(字符串)
else
{
myCelebrityList.add( oneName );
}
}
celebrityNamesFile.close();
$
然后,它不喜欢我的sort语句:
绑定(bind)不匹配:类型为Collections的通用方法sort(List 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 );
}
}
}
我究竟做错了什么?我在这里阅读了很多文章,阅读了关于比较器的Java文档,阅读了关于比较器的Java教程。 Ivor Horton是Java的负责人,他是Java 7的创始人。他仍然一无所知。
该程序的目的是从txt文件中读取名称,将其添加到arraylist,以其自然顺序打印arraylist,按姓氏对arraylist进行排序,然后再次打印该列表。
最佳答案
对于第一个问题,问题非常简单。 oneName
是String
,而myCelebrityList
是CelebrityNamesFile
的集合-这意味着您只能将对象添加到CelebrityNamesFile
类型的集合中。
对于第二个问题,您的问题是CelebrityNamesFile
类未实现Comparable
接口(interface)。排序要求对列表元素类型(例如,通过为该类实现Comparable
或向Comparator
提供sort
。