在我正在使用的代码下面,可以正常工作并输出名称,但不能使用sort方法。我期望“ Collections.sort(nameFromText);”
按名字的字母顺序对ArrayList进行排序。
我究竟做错了什么?
public static void main(String[] args) throws IOException {
// Create and populate text file
Writer textFile = new FileWriter("names.txt");
String[] nameArray = new String[] { "Tina Tully\n", "Bill Simpson\n",
"Dana Smith\n", "Ralph Andrews\n", "Greg Smithers\n",
"Lisa Krump\n", "Gill Bitters\n", "Barbara West\n",
"Sandra McDonald\n", "Bart Willis\n", "Bucky Zimmerman\n",
"Richard Vicks\n", "Velma Tarp\n", "Winslow Tunnell\n",
"Andrew Letterman\n", "Betty Trump\n", "Waldo Smith\n",
"Kyle Ronno\n", "Vivian West\n", "Wendy Tunnell\n" };
generateText(textFile, nameArray);
// Create object of previously created text file
Scanner pullFile = new Scanner(new File("names.txt"));
// Create 20 Person Objects and add to ArrayList data structure with
// name variables assigned to values from text file
ArrayList<Person> nameFromText = new ArrayList<Person>();
fillArrayList(nameFromText, pullFile);
// Sort ArrayList
Collections.sort(nameFromText);
// Print ArrayList
printNamesFromObjects(nameFromText);
}
private static void printNamesFromObjects(ArrayList<Person> namesFromText) {
for (int i = 0; i < 20; i++) {
System.out.println(namesFromText.get(i).name);
}
}
private static void fillArrayList(ArrayList<Person> nameFromText,
Scanner pullFile) {
while (pullFile.hasNext()) {
Person obj = new Person(pullFile.nextLine());
nameFromText.add(obj);
}
}
private static void generateText(Writer textFile, String[] nameArray)
throws IOException {
for (int i = 0; i < 20; i++) {
textFile.write(new String(nameArray[i]));
}
textFile.close();
}
Collections.sort(List<T>)
方法期望要排序的列表元素具有可比性。元素类型T
应该实现Comparable
接口,或者您应该使用sort()
带有通用Comparator
实例的重载方法。
在下面的代码中,您不满足上述两个条件。您的Person
类既没有实现Comparable
,也没有传递任何Comparator
实例。
ArrayList<Person> nameFromText = new ArrayList<Person>();
fillArrayList(nameFromText, pullFile);
// Sort ArrayList
Collections.sort(nameFromText); // How to sort?
您应该Comparator
为您的Person
类创建一个,以告诉该sort()
方法如何对其进行排序(可能在Person类中存储的String上)
这是实现通用比较器的方法:
public class PersonNameComparator implements Comparator<Person> {
public int compare(Person p1, Person p2) {
return p1.getName().compareTo(p2.getName());
}
}
然后,您的Collections.sort()
方法调用应类似于:
Collections.sort(nameFromText, new PersonNameComparator());
下面我使用的代码工作正常,并输出名称,但排序方法不起作用。我需要“Collections.sort(nameFromText);”按名字的字母顺序对ArrayList排序。 我做错了什么?
因此,我有实现comparable的类,但当我试图创建调用Collections.sort()的排序方法时,它给出了一个错误,说明我不能用ArrayList调用collection sort。有人能帮忙吗?并且帮助我使用compareTo方法,我仍然停留在如何比较ArrayList中的每个元素上
本文向大家介绍JAVA对list集合进行排序Collections.sort(),包括了JAVA对list集合进行排序Collections.sort()的使用技巧和注意事项,需要的朋友参考一下 对一个集合中的对象进行排序,根据对象的某个指标的大小进行升序或降序排序。代码如下: 进行降序排列 进行升序排列 经过测试发现,只需要把两个对象的位置调换一下即可升序或降序。 如果指标相同,根据多个指标进行
问题内容: 我在Java中有一个双打列表,我想按降序对ArrayList进行排序。 输入如下: 输出应该是这样的 问题答案: 那会做你想要的。请记住要导入!
问题内容: 有人可以给我看一个简单的示例,如何使用新的lambda语法在Java 8中按字母顺序排序。 问题答案: 对于字符串,这将工作
问题内容: 我正在为我的通讯录应用程序实现排序功能。 我想排序一个。是一个包含四个字段的类:姓名,家庭电话,手机号码和地址。我想继续。 如何编写自定义排序功能来做到这一点? 问题答案: 这是有关订购对象的教程: Java教程-集合-对象排序 尽管我会举一些例子,但我还是建议你阅读它。 有多种排序方式。如果要定义自然的(默认)排序,则需要让实现。假设你想默认在上进行排序name,然后执行(为简单起见