我想显示存储在文本文件中的所有客户,但是一个客户存储在许多文本文件中,并且他显示的次数超过一次。如何消除这些客户的重复?我甚至尝试过使用HashSet但是没有用。这是我的代码。
public class ReadFile {
private int countCustomer = 0;
private File path;
private List<Customer> customers = new ArrayList<Customer>();
public ReadFile(File file_path) {
path = file_path;
}
public String[] openFile() throws IOException {
FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr);
int numberOfLines = readLines();
String[] textData = new String[numberOfLines];
for (int i = 0; i < numberOfLines; i++)
{
textData[i] = br.readLine();
}
br.close();
return textData;
}
public void arrayCustomer(){
try{
String[] array = openFile();
for (int j=0; j< array.length;j++)
{
String str = array[j];
String[] temp;
String delimiter = " ";
temp = str.split(delimiter);
String category = temp[0];
double balance = Double.parseDouble(temp[1]);
int moveNumber = Integer.parseInt(temp[2]);
int accountNumber = Integer.parseInt(temp[3]);
if (!isIn(new Customer(category, balance, moveNumber, accountNumber)))
{
customers.add(new Customer(category, balance, moveNumber, accountNumber));
countCustomer++;
}
}
}
catch(IOException e){
e.printStackTrace();
}
}
public boolean isIn(Customer customer){
for (int i = 0; i < customers.size(); i++){
if (customers.get(i).getAccountNumber() == customer.getAccountNumber())
{
return true;
}
}
return false;
}
public void listCustomers() {
for (Customer customer : customers) {
System.out.print("Category: " + customer.getCategory());
System.out.print(" Balance: " + customer.getBalance());
System.out.print(" Moves: " + customer.getMoveNumber());
System.out.println(" Account number: " + customer.getAccountNumber());
}
}
public int readLines() throws IOException {
FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr);
int numberOfLines = 0;
String aLine;
while((aLine = br.readLine()) != null)
{
numberOfLines++;
}
br.close();
return numberOfLines;
}
// The class with the main method
public class FileList {
public static Scanner scan;
public static ReadFile f;
public static final File folder = new File("C:/My_dir");
public static void main(String[] args) {
Logger logger = Logger.getLogger("textfiles");
scan = new Scanner(System.in);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++)
{
File fileEntry = listOfFiles[i];
if (!fileEntry.isDirectory())
{
try{
f = new ReadFile(fileEntry);
f.openFile();
f.arrayCustomer();
f.listCustomers();
}
catch(IOException e)
{
e.printStackTrace();
}
}
else
{
logger.log(Level.INFO, "The directory is empty!");
}
}
答案 0 :(得分:2)
如果Set
被正确定义,Customer
应该可以解决问题。您需要确保Customer
同时具有equals()
和hashCode()
对象,这些对象在同一组字段上运行,并且可以正确识别两个客户是否与定义的“相同”根据您的商业标准。