2

我有一个Person拥有List“memberOf”的bean。现在我想要的是,为每个“memberOf”条目写一行这个bean(项目需要它)。我所有的代码都写在bean周围,但我有这个问题。例如:

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

使用 CsvWriterSettings 和 BeanWriterProcessor 我在 csv 中得到的内容类似于:

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

但我想要的是:

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

有没有办法在使用时做到这一点BeanWriterProcessor

谢谢

4

1 回答 1

0

图书馆的作者在这里。虽然库不支持你想做的事情,但让它工作起来相对容易——下面的例子有点糟糕,但会做你想做的事。

基本上,您可以注释类的方法。使用它来创建一个方法,该方法在isMemberOf每次调用时都返回您的元素。例如:

    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();
    }

然后您可以一遍又一遍地编写相同的 bean,直到hasMoreGroups返回false

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

我用来测试的代码:

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());
}

输出:

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

希望能帮助到你

于 2017-10-09T01:53:29.070 回答