gpt4 book ai didi

java - 通过使用 Lambda 函数匹配 map 列表和对象列表之间的字段来创建列表组合?

转载 作者:行者123 更新时间:2023-11-30 12:06:45 25 4
gpt4 key购买 nike

我是 Java lambda 表达式的新手,一直在努力解决以下问题:

我有一个标签对象列表,其 fieldsid 是我想从其他 map 列表中提取的唯一键。

[
{
"objectid": 10,
"eventsourceid": 6,
"fieldid": "ACQUIRE"
},
{
"objectid": 13,
"eventsourceid": 6,
"fieldid": "HASSVALIM"
}
]

map 列表具有以下结构

[
{
"ACQUIRE": "1.42541559",
"PERMCONVERGENT": "CaSPC3",
"PVP": 133.88,
"HASSVALIM": "67A4",
"LASTUPDATE": "2018-10-10T13:38:11.000Z"
},
{
"ACQUIRE": "2.1327",
"PERMCONVERGENT": "Calp3",
"PVP": 23.18,
"HASSVALIM": "1A24",
"LASTUPDATE": "2018-10-10T13:38:11.000Z"
},
{
"ACQUIRE": "1.12459",
"PERMCONVERGENT": "CaSPC3",
"PVP": 33.58,
"HASSVALIM": "653",
"LASTUPDATE": "2018-10-10T13:38:11.000Z"
},
]

我只想从 map 列表中提取第一个列表 (fieldid) 中所需的值,并生成一个列表以稍后生成 CSV,因此我想要的列表的外观将是:

{
[1.42541559, 67A4],
[2.1327, 1A24],
[1.12459, 653],

}

我通过以下方式迭代得到了想要的结果。

    List<Map<String, Object>> dataMapList = this.getTableMap();
List<CatalogLabel> columnsLabel = this.getCatalogtypelabel(objectid);

List<String[]> body = new ArrayList<>();
for(Map<String,Object> map:dataMapList) {
String[] row = new String[columnsLabel.size()];
int index=0;
for(CatalogLabel label:columnsLabel) {
if(map.containsKey(label.getFieldid())) {
row[index++] = map.get(label.getFieldid()).toString();
}
}
body.add(row);
}

我想知道是否有可能使用 Lambda 表达式(流、过滤器、收集、映射等)获得不同的结果。

最佳答案

Stream 的可能方法是

final List<List<String>> collect =
dataMapList.stream()
.map(map ->
columnsLabel.stream()
.map(cl -> cl.getFieldid())
.map(id -> String.valueOf(map.get(id)))
.collect(Collectors.toList())
).collect(Collectors.toList());

哪些输出

[
[1.42541559, 67A4],
[2.1327, 1A24],
[1.12459, 653]
]

它符合您的迭代方法并且避免使用原始数组。

关于java - 通过使用 Lambda 函数匹配 map 列表和对象列表之间的字段来创建列表组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55342854/

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