0

フォルダー内のテキスト ファイル (150 個のテキスト ファイル) から 150 個の従業員オブジェクトを作成し、コレクションに格納するこのようなコードを作成しました。

これらのテキスト ファイルには、従業員の ID、名前、年齢が含まれています。

私の問題は、これらの 150 人の従業員の ID、名前、年齢を並べ替えたいことです..どのように記述すればよいですか..コンパレータまたは同等のインターフェイスを実装する必要がありますか? そしてそれを実装します。ガイドしてください

コードは以下のとおりです。

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));
        }

    }

}
4

1 に答える 1

0

これを行う 1 つの方法は、Collections.sort()メソッドを使用することです...

要素の自然順序付けに従って、指定されたリストを昇順に並べ替えます。リスト内のすべての要素は Comparable インターフェースを実装する必要があります。

Comparableインターフェースは、...

このオブジェクトが指定されたオブジェクトより小さいか、等しいか、または大きいので、負の整数、ゼロ、または正の整数を返します。

したがって、従業員オブジェクトを 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 );、値をループして出力する前に使用します。

于 2013-06-02T08:01:56.217 に答える