2016-05-14 2 views
-4

これはオブジェクトをTreeMapに入れたいクラスです。JavaのTreeMap実装は最後の要素のみを返します

public class JobDefinition { 
    private static String jobDescription; 
    private static String datasetName; 
    private static String jobName; 
    private static String responsiblePerson; 
    public JobDefinition(String jobDesc, String dataSet, String jobName2, String person) { 
     jobDescription=jobDesc; 
     datasetName=dataSet; 
     jobName=jobName2; 
     responsiblePerson=person; 
    } 
    public String getJobDescription() { 
     return jobDescription; 
    } 

    public String getDatasetName() { 
     return datasetName; 
    } 

    public String getJobName() { 
     return jobName; 
    } 

    public String getResponsiblePerson() { 
     return responsiblePerson; 
    } 

} 

ここでは、POIライブラリを使用してスプレッドシートから値を取得しています。 TreeMapはその値として上記のクラスのKeyとObjectとして整数を使います。

for (int rowCount = rowStartIndex+1; rowCount < rowEndIndex; rowCount++) 
    { 
     String jobDesc=spreadsheet.getRow(rowCount).getCell(0).toString(); 
     String dataSet=spreadsheet.getRow(rowCount).getCell(1).toString(); 
     String jobName=spreadsheet.getRow(rowCount).getCell(2).toString(); 
     String person =spreadsheet.getRow(rowCount).getCell(3).toString(); 
     if(!jobName.equals("N/A") && jobName!=""){ 
      validJobCount++; 
      jobDefinitionInfo.put(validJobCount, new JobDefinition(jobDesc,dataSet,jobName,person)); 
      } 
    } 
    for(Map.Entry<Integer,JobDefinition> entry : jobDefinitionInfo.entrySet()) { 
      System.out.println(entry.getKey()+"::"+entry.getValue().getJobDescription()); 
     } 

すべての値がマップに設定されている場合。そして私はそれを繰り返す。私は正しいキーを取得しますが、それに対するすべての対応する値(JobDefinitionクラスのオブジェクトです)は最後に配置された値です。

出力::

1::Monthly UPDTMEND File 
2::Monthly UPDTMEND File 
3::Monthly UPDTMEND File 
4::Monthly UPDTMEND File 
5::Monthly UPDTMEND File 
6::Monthly UPDTMEND File 
7::Monthly UPDTMEND File 
8::Monthly UPDTMEND File 
9::Monthly UPDTMEND File 
10::Monthly UPDTMEND File 

予想される出力

1::VRSFEND - TRANSACTION SWEEP 
2::XCTLOAD 
3::CHEKDATE - TO IDENTIFY BACKDATED TRANSACTIONS 
4::EDITALIVE 
5::EDITB 
6::PRICE LOAD 
7::ACCTSIM - run manually 
8::ACCTLIV - run manually by DVG       
9::Check Sybase jobs 
10::Monthly UPDTMEND File 

私は実装に問題があると感じ。正しく動作させるために何を追加するべきか教えてください。

+2

'フィールド宣言からstatic'を削除します。 – Andreas

+0

_ "TreeMapは値として上記のクラスのKeyとObjectとして整数を使用します" _質問をするための基本ルール:***あなたがしたことを教えてください、コードを表示してください*** –

+0

@JimGarrison: loop - > if条件が内部にあると、コード内にあります。 validJobcountは整数です。コードスニペットが大きかったので、私はそれを明示的に言及すると考えました。 Andreasが言及したように、静的フィールドによるものでした。返信ありがとうございます。 :) –

答えて

0

あなたのパラメータにstaticを使用しています。これは、実行するたびに常に上書きされ、最後の要素が常に得られる理由を完全に説明することを意味します。あなたはこれを変更する必要が

private String jobDescription; 
private String datasetName; 
private String jobName; 
private String responsiblePerson; 
関連する問題