gpt4 book ai didi

java - 如何使用 SimpleFlatMapper 将带前缀的 CSV 列别名到映射?

转载 作者:行者123 更新时间:2023-11-30 05:41:32 26 4
gpt4 key购买 nike

背景

使用 SimpleFlatMapper sfm-csv 6.0.3

示例 CSV:

|------|-------------|----------------|----------------|------------------|
| name | reference # | pf.first thing | pf.secondThing | pf.another.thing |
|======|=============|================|================|==================|
| foo | eb2e23c0d6a | a value here | | another value |
|------|-------------|----------------|----------------|------------------|
| bar | 0a4bba4c1d0 | values | all | throughout |
|------|-------------|----------------|----------------|------------------|

波乔

class Item {

private String name;
private String reference;
private Map<String, String> prefixedFields;

// ... builder, getters, etc.

}

简化的代码

final CsvMapper<Item> mapper = CsvMapperFactory.newInstance()
.addAlias("name", "itemName")
.addAlias("reference #", "reference")
.newMapper(Item.class);

return CsvParser.mapWith(mapper)
.stream(file, items -> items.collect(List.collector()));

问题

照原样,Map 将返回 null。我正在努力达到以下目标:

firstRowItem.getPrefixedFields() == ImmutableMap.of(
"first thing", "a value here",
"another.thing", "another value")

secondRowItem.getPrefixedFields() == ImmutableMap.of(
"first thing", "values",
"secondThing", "all",
"another.thing", "throughout")

“pf”。前缀是一成不变的,如果属性名为“pf”,则一切正常:

class Item {
// ...
private Map<String, String> pf;
// ...
}

但我希望将该属性命名为“prefixedFields”而不是“pf”。

尝试解决

.addColumnProperty(
col -> col.getName().startsWith("pf."),
MapTypeProperty.KEY_VALUE)
  • .addAlias 只接受 String 参数,所以这样的东西不起作用:
.addAlias("pf.", "prefixedFields")

最佳答案

A comment on a GitHub issue from the project owner让我走上了正轨。

addColumnProperty接受 Object 的可变参数。您可以传入RenameProperty ,它接受 String用于简单列重命名的参数或 Function<String, String> renameFunction 。将它们放在一起,如下所示:

final CsvMapper<Item> mapper = CsvMapperFactory.newInstance()
.addAlias("name", "itemName")
.addAlias("reference #", "reference")
.addColumnProperty(
column -> column.getName().startsWith("pf."),
new RenameProperty(columnName -> columnName.replace("pf.", "prefixedFields_")))
.newMapper(Item.class);

关于java - 如何使用 SimpleFlatMapper 将带前缀的 CSV 列别名到映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55541609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com