将两个List <>映射到HashMap

时间:2019-08-23 07:03:10

标签: java java-8 hashmap

我有两个列表 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中最好的方法是什么。

2 个答案:

答案 0 :(得分:2)

如果您正在寻找专门基于Java 8流的方法,则可以使用以下方法。

Map<String, String> outputMap = colMapList.stream()
            .collect(Collectors.toMap(ColumnIndexMapping::getColumnname, 
                    (colMap) -> secondList.get(colMap.getIndex())));

答案 1 :(得分:1)

假设您已正确填充colMapListsecondList,则转换代码相对简单:

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()));
}