2017-10-08 9 views
2

"memberOf"인 Person 콩이 있습니다. 이제 내가 원했던 것은 "memberOf"항목 당이 빈의 한 행을 작성하는 것입니다 (프로젝트에서 필요합니다). 내 모든 코드는 콩 주위에 쓰여 있지만이 문제가 있습니다. 예 : Univocity - 목록 속성을 여러 줄로 작성

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

어떤 방법이 있나요 :

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

하지만 내가하고 싶은 것은 다음 CsvWriterSettings 내가 csv로 얻을 무엇 BeanWriterProcessor를 사용

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... 
} 

뭔가처럼 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 때까지 반복해서 같은 빈을 쓸 수 있습니다

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

희망 하시겠습니까?

+0

나는 그 해결책을 좋아한다. 필자는 "메소드 별"주석에 대해서는 생각하지 않았습니다. 고마워요. – snap98