我有两个列表 ColumnIndexMapping列表,另一个是字符串列表
一个列表包含一个类的对象。结构如下所示-
public class ColumnIndexMapping {
private int index;
private String columnname;
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public String getColumnname() {
return columnname;
}
public void setColumnname(String columnname) {
this.columnname = columnname;
}
}
现在我必须同时使用两个列表制作地图。我只需要从第二个列表(字符串列表)中读取那些我们在第一个列表中具有index属性的索引。如下所示-
List<ColumnIndexMapping> colMapList = [
{
"index": 0,
"columnname": "accountname"
},
{
"index": 2,
"columnname": "source"
},{
"index": 4,
"columnname": "customField13"
} ]
List<String> secondList = {"Nitin","India","1234","fnf","qwerty"}
Output would be ->
HashMap<String,String> outputHashmap =
{
"accountname":"Nitin",
"source":"1234",
"customField13":"qwerty"
}
尝试使用Java7的方法
Map<String, String> output = new HashMap<>();
for (ColumnIndexMapping colMap: colMapList) {
output.put(colMap.getColumnname(), secondList .get(colMap.getIndex()));
}
现在在Java8中最好的方法是什么。
答案 0 :(得分:2)
如果您正在寻找专门基于Java 8流的方法,则可以使用以下方法。
Map<String, String> outputMap = colMapList.stream()
.collect(Collectors.toMap(ColumnIndexMapping::getColumnname,
(colMap) -> secondList.get(colMap.getIndex())));
答案 1 :(得分:1)
假设您已正确填充colMapList
和secondList
,则转换代码相对简单:
List<ColumnIndexMapping> colMapList = ...; // assumed this is populated correctly
List<String> secondList = ...; // assumed this is populated correctly
Map<String, String> output = new HashMap<>();
for (ColumnIndexMapping mapping : colMapList) {
output.put(mapping.getColumnname(), secondList.get(mapping.getIndex()));
}