我写了一个像这样的代码,它从一个文件夹中的文本文件(150个文本文件)中创建了150个员工对象,并将其存储在一个集合中。
这些文本文件包含id,姓名和雇员年龄。
我的问题是我想对这150名员工的身份,姓名和年龄进行排序。我应该怎么写呢...我应该实施比较器还是类似的界面?并实施它。 请指导我
代码如下:
package com.fulcrum.emp;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class TestingColections {
public static void main(String[] args) {
File folder = new File("D:\\employee files");
File[] listOfFiles = folder.listFiles();
ArrayList<Employee> emp= new ArrayList<Employee>();;
int id = 0;
String name = null;
int age = 0;
for (File file : listOfFiles) {
try {
Scanner scanner = new Scanner(file);
String tokens = "";
String[] newtokens = null;
while (scanner.hasNext()) {
tokens = tokens.concat(scanner.nextLine()).concat(" ");
tokens = tokens.replace("=", "|");
newtokens = tokens.split("[|\\s]");
}
id = Integer.parseInt(newtokens[1]);
name = (newtokens[3] + " " + newtokens[4]);
age = Integer.parseInt(newtokens[6]);
emp.add(new Employee(id, name, age));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
for(int i=0;i<emp.size();i++)
{
System.out.println(emp.get(i));
}
}
}
答案 0 :(得分:0)
执行此操作的一种方法是使用Collections.sort()方法......
根据元素的自然顺序,将指定列表按升序排序。列表中的所有元素都必须实现Comparable接口。
Comparable接口只定义了一个......
的方法返回负整数,零或正整数,因为此对象小于,等于或大于指定对象。
因此,如果您的Employee对象按ID排序,那么以下内容将通过您:
public class Employee implements Comparable<Employee> {
// Existing code
public int compareTo( Employee e ) {
return this.id - e.getId();
}
}
如果您想按员工的姓名订购,那么方法可以是:
@Override
public int compareTo( Employee arg0 ) {
return this.name.compareTo( arg0.getName() );
}
要对集合进行排序,请在循环并打印值之前使用Collections.sort( emp );
。