java - 使用 Univocity 将 bean 注释到部分记录
问题描述
我想让 Univocity 使用带注释的 bean实例来确定 CSV 内容的一部分,即仅前几列。其余列由一些复杂的编程逻辑提供,独立于 bean 实例或类型。
我知道 Univocity 可以将带注释的 bean 转换为记录,但是我找不到如何使用 Univocity 处理带注释的 bean 以获得部分记录,而我在不使用带注释的 bean 的情况下以编程方式确定记录的其余部分。
bean 将使用@Headers 和@Parsed 注释进行注释。(带注释的 bean 将由我的库的用户提供。)
我想实现与以下功能等效的东西。
public void toCsv(Map<UserBean, MyContent> entries) {
CsvWriter writer = …
List<String> beanHeaders = someUnivocityHelper.getAsHeaders(UserBean.class);
List<String> allHeaders = ImmutableList.builder().addAll(beanHeaders).addAll(myHeaders).build();
writer.writeHeaders(allHeaders);
for (Entry<UserBean, MyContent> entry : entries.entrySet()) {
UserBean userBean = entry.getKey();
Map<String, Object> beanAsMap = someUnivocityHelper.getAsMap(userBean);
beanAsMap.entrySet().stream().forEach(e -> writer.addValue(e.getKey(), e.getValue()));
MyContent content = entry.getValue();
// Here I use content and the writer to write the rest of the record
…
writer.writeValuesToRow();
}
}
如何使用单义性从 bean 类中检索标头和 bean 实例中的解析值?
解决方案
要读取仅在 bean 中定义的标头,您可能可以尝试@Headers(extract=true)
,因此库将使用来自用户 bean 的注释。之后如果您想编写更多标题 - 只需将所有必需的标题设置为 csv writer: CsvWriterSettings.setHeaders(allHeaders)
。
也看看com.univocity.parsers.annotations.helpers.AnnotationHelper
公共课。
推荐阅读
- mysql - 使用 SSMS 连接到使用 MySQL 命令行客户端创建的数据库
- datastage - 将十进制转换为时间戳问题
- android - Admob 广告未在真实设备中显示,尽管它在模拟器上运行
- java - 什么是监视器,它是如何在 JAVA 中实现的?
- zsh - theme_precmd:1: vcs_info: 未找到 Oh-my-zsh 的函数定义文件
- python - Qslider 不会在 PyQt5 中传递参数
- python - Selenium 从密码中插入随机字母
- android-studio - HLS 在以下代码中无法在 exoplayer 中工作
- javascript - 循环来自 JSON 的数据没有给出预期的结果
- javascript - jQuery大于和小于检查