2017-10-08 15 views
2

私はPersonListの "memberOf"を持つbeanを持っています。今、私が望むのは、 "memberOf"のエントリごとにこのBeanを1行書き込むことです(プロジェクトで必要です)。私のコードはすべて豆の中に書かれていますが、私はこの問題を抱えています。例:Univocity - 複数の行にリストプロパティを書き込む

public class Person { 
    @Parsed(field = "USR_USERID") 
    private String uid; 
    @Parsed(field = "USR_NSUNIQUEID") 
    private String nsUniqueID; 

    @Parsed(field = "GROUP_NAME") 
    List<String>isMemberOf; 
    //-- Getters and Setters... 
} 

私はcsvファイルで何を得るCsvWriterSettingsとBeanWriterProcessorを使用するようなものである:

"uid","nsuniqueId","[memberOf1, memberOf2...]" 

しかし、私が望むことは次のとおりです。

"uid","nsuniqueId","memberOf1" 
"uid","nsuniqueId","memberOf2" 

は、どのような方法がありますBeanWriterProcessorを使用していますか?

ありがとうございました

答えて

0

ここに図書館の著者があります。ライブラリはあなたがしたいことをサポートしていませんが、それを動作させるのは比較的簡単です。次の例はちょっとしたことですが、あなたが望むことをするでしょう。

基本的に、クラスのメソッドにアノテーションを付けることができます。これを使用して、呼び出されるたびにisMemberOfの要素を返すメソッドを作成します。たとえば:

public static void main(String... args) { 
    Person person = new Person(); 
    person.uid = "XYZ"; 
    person.nsUniqueID = "abc"; 
    person.isMemberOf.add("group1"); 
    person.isMemberOf.add("group2"); 
    person.isMemberOf.add("group3"); 

    StringWriter out = new StringWriter(); 

    CsvWriterSettings settings = new CsvWriterSettings(); 
    settings.setHeaderWritingEnabled(true); 
    settings.setRowWriterProcessor(new BeanWriterProcessor<Person>(Person.class)); 

    CsvWriter writer = new CsvWriter(out, settings); 

    while (person.hasMoreGroups()) { 
     writer.processRecord(person); 
    } 
    writer.close(); 

    System.out.println(out.toString()); 
} 

出力:

while (person.hasMoreGroups()) { 
     writer.processRecord(person); 
    } 

コードは、私がテストに使用:

private int groupNameIndex = 0; 

    @Parsed(field = "GROUP_NAME") 
    public String nextGroupName() { 
     if (hasMoreGroups()) { 
      return isMemberOf.get(groupNameIndex++); 
     } 
     return null; 
    } 

    public boolean hasMoreGroups() { 
     return isMemberOf != null && groupNameIndex < isMemberOf.size(); 
    } 

は、その後、あなたはhasMoreGroups戻りfalseまで何度も同じBeanを書くことができます

USR_USERID,USR_NSUNIQUEID,GROUP_NAME 
XYZ,abc,group1 
XYZ,abc,group2 
XYZ,abc,group3 

希望します。

+0

私は回避策が好きです。私はメソッドごとのアノテーションについては考えていませんでした。どうもありがとう – snap98

関連する問題