Below the code I am using works just fine and outputs the names except that the sort method is not working. I expected “Collections.sort(nameFromText);” to sort the ArrayList in alphabetical order by first name.
What am I doing wrong?
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>)method expects the element of the list it is sorting to be comparable. Either the element typeTshould implement theComparableinterface, or you should use the overloadedsort()method, that takes a genericComparatorinstance.In the code below, you are satisfying neither of the above conditions. Neither your
Personclass implementsComparable, nor you are passing anyComparatorinstance.You should create a
Comparatorfor yourPersonclass to tell thesort()method how to sort it (may be on String stored in Person class)Here’s how you implement a generic comparator:
And then your
Collections.sort()method invocation should be like: –