Java 通过使用Lambda函数在地图列表和对象列表之间匹配字段来创建列表?
我是Java lambda表达式的新手,一直在努力解决以下问题: 我有一个标签对象列表,其fieldsid是我想从其他地图列表中提取的唯一键Java 通过使用Lambda函数在地图列表和对象列表之间匹配字段来创建列表?,java,performance,lambda,java-8,refactoring,Java,Performance,Lambda,Java 8,Refactoring,我是Java lambda表达式的新手,一直在努力解决以下问题: 我有一个标签对象列表,其fieldsid是我想从其他地图列表中提取的唯一键 [ { "objectid": 10, "eventsourceid": 6, "fieldid": "ACQUIRE" }, { "objectid": 13, "eventsourceid": 6, "fieldid": "HASSV
[
{
"objectid": 10,
"eventsourceid": 6,
"fieldid": "ACQUIRE"
},
{
"objectid": 13,
"eventsourceid": 6,
"fieldid": "HASSVALIM"
}
]
地图列表具有以下结构
[
{
"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"
},
]
我只想从地图列表中提取第一个列表(fieldid)中所需的值,并生成一个列表,以便稍后生成CSV,因此我所需列表的外观将是:
{
[1.42541559, 67A4],
[2.1327, 1A24],
[1.12459, 653],
}
我通过以下方式迭代得到了期望的结果
List dataMapList=this.getTableMap();
List columnsLabel=this.getCatalogtypelabel(objectid);
列表体=新的ArrayList();
用于(映射:dataMapList){
String[]行=新字符串[columnsLabel.size()];
int指数=0;
用于(目录标签:columnsLabel){
if(map.containsKey(label.getFieldid())){
行[index++]=map.get(label.getFieldid()).toString();
}
}
正文.添加(行);
}
我想知道使用Lambda表达式(流、过滤器、收集、映射等)是否可能得到不同的结果。使用
流的可能方法可能是
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());
这与您的迭代方法相匹配,并且避免使用基元数组。这是使用流的等效方法:
List<String[]> body = dataMapList.stream()
.map(d -> columnsLabel.stream()
.map(CatalogLabel::getFieldid)
.map(d::get)
.map(Object::toString)
.toArray(String[]::new))
.collect(Collectors.toList());
List body=dataMapList.stream()
.map(d->columnsLabel.stream()
.map(CatalogLabel::getFieldid)
.map(d::get)
.map(对象::toString)
.toArray(字符串[]::新建))
.collect(Collectors.toList());
[
[1.42541559, 67A4],
[2.1327, 1A24],
[1.12459, 653]
]
List<String[]> body = dataMapList.stream()
.map(d -> columnsLabel.stream()
.map(CatalogLabel::getFieldid)
.map(d::get)
.map(Object::toString)
.toArray(String[]::new))
.collect(Collectors.toList());