使用java集合对Person的ArrayList进行排序

在我使用的代码下面工作正常并输出名称,除了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 nameFromText = new ArrayList(); fillArrayList(nameFromText, pullFile); // Sort ArrayList Collections.sort(nameFromText); // Print ArrayList printNamesFromObjects(nameFromText); } private static void printNamesFromObjects(ArrayList namesFromText) { for (int i = 0; i < 20; i++) { System.out.println(namesFromText.get(i).name); } } private static void fillArrayList(ArrayList 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应该实现Comparable接口,或者您应该使用重载的sort()方法,它接受一个通用的Comparator实例。

在下面的代码中,您既不满足上述条件。 您的Person类既不实现Comparable ,也不传递任何Comparator实例。

 ArrayList nameFromText = new ArrayList(); fillArrayList(nameFromText, pullFile); // Sort ArrayList Collections.sort(nameFromText); // How to sort? 

你应该为你的Person类创建一个Comparator来告诉sort()方法如何对它进行排序(可能在存储在Person类中的String上)

以下是如何实现通用比较器:

 public class PersonNameComparator implements Comparator { public int compare(Person p1, Person p2) { return p1.getName().compareTo(p2.getName()); } } 

然后你的Collections.sort()方法调用应该像: –

 Collections.sort(nameFromText, new PersonNameComparator()); 

或者,您可以直接在Person类中实现Comparable接口并覆盖’compareTo(Object obj)’方法。 在这种情况下,您不需要为比较器创建新类。 这就像内置排序一样。

尝试这个:

 List inputString = Arrays.asList("Sijan", "Sudeep", "Parasar", "Raj Kumar"); Collections.sort(inputString); System.out.println(inputString); 

使用Collections.sort(managerNameList);

 ArrayList managerNameList = new ArrayList(); managerNameList.add("antesh"); managerNameList.add("Lalit"); managerNameList.add("Gokul"); managerNameList.add("Ajay"); System.out.println("Arraylist before sorting"); for(String name: managerNameList) { System.out.println(name); } Collections.sort(managerNameList); System.out.println("Arraylist after sorting"); for(String name: managerNameList) { System.out.println(name); }