我有一个充满数据的对象。现在我想创建一个带有注释的类,它允许我创建具有指定列顺序的CSV文件或任何通用解决方案。我的数据表示有点复杂,这意味着它是一个对象列表。
例如:
class User {
public String name;
public int age;
List<Relatives> relativeList;
public User() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<Relatives> getRelativeList() {
return relativeList;
}
public void setRelativeList(List<Relatives> relativeList) {
this.relativeList = relativeList;
}
}
class Relatives {
public int id;
public String name;
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setName(String name) {
this.name= name;
}
public String getName() {
return name;
}
}
我想创建CSV文件的数据填充在这个类的对象。
例如User user = new User();
user.setName("Jackson");
user.setAge(32);
List<Relatives> relativeList = new ArrayList<Relatives>();
Relatives relatives = new Relatives();
relatives.setId(110);
relatives.setName("father");
relativeList.add(relatives);
relatives = new Relatives();
relatives.setId(111);
relativ.add(relatives);
relativeList.setName("mother");
user.setRelativeList(relativeList);
我想创建CSV文本,如。
"name";"age";"relatives id1";"relatives name1","relatives id2";"relatives name2"
"Jackson";"30";"110";"father";"111";"mother"
如示例所述,如果在relativeList中有3个元素,则应该再添加一个名为"relatives id3"one_answers"relatives name3"的列。即元素+子元素表示亲属+ (id或名称)。与此同时,我想确定在生成的CSV中的列的顺序意味着age可以作为name之前的第一列。
这个问题可能没有确切的解决方案,但任何接近的解决方案都是非常感谢的,并且将会有所帮助。
物品内的List
才是凶手。OpenCSV有一个BeanToCsv
类将对象列表转换为CSV文件,但我怀疑它是否适用于集合(从未尝试过)。
如果你想限制一个人的亲属数量,你仍然可以使用它。然后,您创建一个中间类,它具有原始数据字段,并使用您的User
类的构造函数。然后使用BeanToCsv
创建所需的csv输出。
然而,听起来你并不想限制用户的亲戚数量。因此,您可以使用openCSV来滚动您自己的。给定一个用户对象列表,您必须做四件事:
- 确定用户在您的列表中拥有的最大亲属数量。
- 创建一个
String
数组,其中头值使用#1的值来确定要放置多少相对名称和id列。一旦完成,创建一个List<String []>
并将数组放到列表中。 - 创建一个辅助类,将
User
数组转换为String
数组。从#1传递值,所以如果你有比max更少的亲戚,你可以填充空字符串或null(你的选择)。使用此循环遍历用户对象列表,将每个用户转换为字符串数组,并将该数组添加到#2中创建的列表。 - 使用openCsv中的CSVWriter调用
writeAll
方法传递在步骤2和3中创建和填充的列表。
祝你好运