2017-01-23 8 views
2

私はjavaで新しいですし、1つのタスクでいくつかの問題があります。 私はこのようなファイルtxtをしている:Javaは、txtファイルからデータをソートして表示します

John Doe,01-01-1980,Development,Senior Developer 
Susan Smith,07-12-1983,Development,Head of Development 
Ane Key,06-06-1989,BA,Junior Analyst 
Nina Simone,21-09-1979,BA,Head of BA 
Tom Popa,23-02-1982,Development,Developer 
Tyrion Lannyster,17-03-1988,BA,Analyst 

を、私は部門がそれをソートしたいです。例えば : メンバーは以下のとおりです。

[Employee Full Name] - [Employee Age] - [Employee Position] - [Employee Salary(default value x)] 

Deparment:開発 メンバーは以下のとおりです。 スーザン・スミス...... ジョン・ドウ...... トム・ポパ...... 部門:BA メンバーは以下のとおりです。最初は ニーナ・シモン....... 姉キー........... Tyrion Lannyster ........

は、ファイルを読みます2次元配列を作る正しくソートする方法を続行できません。

public static void main(String[] args) { 

    String csvFile = "C:\\Employees.txt"; 
    BufferedReader br = null; 
    String line = ""; 
    String SplitBy = ","; 

    String myArray[][] = new String[6][5]; 
    int row = 0; 

    try { 
     br = new BufferedReader(new FileReader(csvFile)); 

     while ((line = br.readLine()) != null) { 

      String nums[] = line.split(SplitBy); 

     for (int col = 0; col < nums.length; col++){ 

       String n =nums[col]; 

       myArray[row][col] = n; 
      //  System.out.println(n); 
      }    
      row++; 



     } 

       } 

    catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (br != null) { 
      try { 
       br.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 



} 
+0

これについてチュートリアルやアルゴリズムについて検索しましたか?これは配列のソートを開始するのに役立ちます。 – AxelH

答えて

0

Java Collections APIあなたはutil.Arraysだけでなく、ソートすることができます。 コードの配列メソッドが必要ですが、何らかのコレクションに移動することを検討してください。おそらくリストは始めるべきです。

0

最も簡単な方法は、行の内容をJava Beansに置き、sortを使用してそれらをソートすることです。あなたはそれを学ぶ助けないでしょう

// create a nice List for the users. 
List<User> userList = new ArrayList<>(); 

while ((line = br.readLine()) != null) { 
      User user = new User(); 
      String nums[] = line.split(SplitBy); 
      user.setName(nums[0]); 
      // create nice method to convert String to Date 
      user.setDate(convertStringToDate(nums[1])); 
      // add the user to the list 
      userList.add(user); 

} 

// Then finally sort the data according to the desired field. 
Arrays.sort(userList, (a,b) -> a.name.compareTo(b.name)); 
+0

せん断の例をありがとう。この部分を追加して作業しました: –

+0

ArrayList 開発=新しいArrayList <>(); \t \t ArrayList BA = new ArrayList <>(); { \t \t \t(user.getDepartment()に等しい( "開発")。)であれば{ \t \t \t \t \t \t \t \t Development.add(ユーザー):(USERLISTユーザーユーザ)用 \t \t \t \t ;他 \t \t \t} \t \t \t { \t \t \t \t BA.add(ユーザ)。 \t \t \t} \t \t} \t \t \t \tのSystem.out.println( "部署開発:")。 \t \t(ユーザーユーザー:開発){ \t \t \t System.out.println( "\ t" + user.getName()+ "" + user.getPosition()); \t \t \t \t \t System.out.println( "Department Ba:"); (ユーザーユーザー:BA)のため \t \t { \t \t \tのSystem.out.println( "\ tの "+ user.getName()+"" + user.getPosition())。 –

+0

問題なし! –

0

は、ここでのコードのソリューションを提供する:

public User { 
    private String name; 
    // ... all the fields with getters and setters 
} 

次に、このような何かにあなたのコードを適応させます。しかし、私はあなたに進める方法のヒントを与えることができます。配列の使用は実際には推奨されません。

簡単ですが、汚い方法 - 代わりに2次元配列の

、キーは名前と値と連結部門は、個々の細部の1次元配列である場合TreeMap<String, String[]>を使用しています。 TreeMapを使用しているので、その結果はDepartmentに基づいてソートされ、続いてその人の名前がソートされます。 entrySetをループし、すべての結果を印刷します。

右の方法 -

必要なすべてのメンバーを持つ新しいオブジェクトPersonを定義します。実装Comparableインターフェイス。すべての入力データを読み込み、Personオブジェクトに入力し、そのようなオブジェクトをArrayListにそれぞれ追加し、Collections APIのソートメソッドを使用してすべてのオブジェクトをソートします。あるいは、Comparatorの方法で調整することもできます。

関連する問題