0

入力がcsvファイルデータで、単一ファイルに90k以上のデータ行を持つことができるソフトウェアの構築に取り組んでいます。

ファイルにHEADER行がまったくないことを通知するだけで、データ自体で始まります。

グーグルで、スーパーcsvとドーザーマッパー拡張機能にたどり着きました。単一の csv 行を読み取ると、Pojo が他の pojo の多くのコレクションで満たされる場合の例を見つけることができません。

私のカスタマー Pojo は以下のスナップショットのように見えます...

class CustomerPojo {

    private Id<CustomerId> customerId;

    private String lookupCode;

    // enum type  
    private QuoteType quoteType;

    private String bCovCa;
    private Money bCovRa;


    private String recommCovCa;
    private Money recommCoveRa;

    private Date insertedDate;

    private String pdfName;

    private List<VehicleInfo> vehicleInfoPojoList;

    private List<Address> addressList;

    // All setter-getter
}

ガイダンスを提供できる人もいます。私はサイトを読みすぎていますが、日常のソフトウェアに複数の関連付けとカスタムデータ型がある簡単な例があります。

Thanks in advance.
4

1 に答える 1

1

ヘッダーはありません。CSV の構造を明示的に定義する必要があるため、Super CSV の構成は静的 (ハードコード) になることに注意してください。beanReader.getHeader()ファイルの最初の行はヘッダーではなくデータであるため、への呼び出しは必要ないことに注意してください。

各顧客が CSV ファイルの 1 行にマップされている場合、Web サイトのと同じ方法で Super CSV を構成できるはずです。

たとえば、CSV が次のようになっているとします。

1,1 First St,London,1 First Rd,New York,111AAA,111BBB
2,2 Second St,Paris,2 Second Rd,Munich,222AAA,222BBB

Bean マッピング (POJO に基づく) は次のようになります。

new String[]{"customerId", "addressList[0].street", "addressList[0].city",   
    "addressList[1].street",  "addressList[1].city", 
    "vehicleInfoPojoList[0].rego", "vehicleInfoPojoList[1].rego"}

Dozer は、必要な VehicleInfo クラスと Address クラス、およびリストをインスタンス化します。2 番目の車両のレゴがなかった場合、Dozer は車両リストの 2 番目の要素を入力するべきではありません。

各顧客が 1 つの行にマップされるため、常に固定数の住所/車両などがあるため、インデックス付きマッピングを使用できることに気付くでしょう。


各顧客が複数の行にまたがっている場合は、それほど簡単ではありません。

その場合、各行/Customer を読むことをお勧めします。同じ Customer (つまり、customerId) が見つかった場合は、新しい住所/車両などを既存の Customer にコピーします。

または、独自のセル プロセッサを作成して遊んだり (ここで行ったように)、Dozer のiterate-method機能が役立つかどうかを確認したりすることもできます。

于 2014-03-03T03:55:56.130 に答える