如何转换List <list <string>&gt;到hashmap?

时间:2015-07-09 15:15:25

标签: java arraylist hashmap

我有一个存储密钥和密钥的ArrayList。每行中的值(例如,第一行将具有no,firstname,lastname,age和第二行将具有1,xxx,yyy,23和第3行将具有2,aaa,bbb,24等等)。第一行包含所有键,其余行具有值。 我想将其转换为hashmap(例如,keys应该是firstname,值应该是xxx,aaa)。 有没有办法做到这一点??

4 个答案:

答案 0 :(得分:0)

鉴于HashMap变量在两个方面都是可扩展的(例如,您可以使列表更长,但您也可以使列表中的列表更长),并且假设Option Explicit Sub FillEmptyWithDates() Dim Cell1 As Range Dim Range1 As Range Set Range1 = ActiveWorksheet.Columns(7) For Each Cell1 in Range1 If IsEmpty(Cell1.Value) = True Then Cell1.Value = Date End If Next Cell1 End Sub 基本上有固定维度(一个键转到一个值,而不是多个),唯一的方法是创建一个包含列表数据的新对象,并将关键点指向该对象。

答案 1 :(得分:0)

这将返回一个HashMaps列表,这意味着对于每个值行,您将获得一个键值结构:

static List<HashMap<String, String>> listToMap(List<List<String>> lst){
  List<HashMap<String, String>> lmap = new ArrayList<>();
  List<String> keys = lst.get(0);
  for(int row=1;row<lst.size();row++){
    List<String> currentRow = lst.get(row);
    HashMap<String, String> kvRow = new HashMap<String, String>();
    for(int i=0;i<keys.size();i++){
      kvRow.put(keys.get(i), currentRow.get(i));
    }
    lmap.add(kvRow);
  }
  return lmap;
}

如果您使用样本数据运行...

public static void main(String[] args) {
  List<List<String>> lst = new ArrayList<>(3);
  lst.add(Arrays.asList("no","firstname","lastname","age"));
  lst.add(Arrays.asList("1","xxx","yyy","23"));
  lst.add(Arrays.asList("2","aaa","bbb","24"));
  System.out.println(listToMap(lst));
}

打印

[{no=1, age=23, lastname=yyy, firstname=xxx}, {no=2, age=24, lastname=bbb, firstname=aaa}]

这是你想要的吗?此代码假定所有值行的值至少与&#34;键&#34; -row一样多。

答案 2 :(得分:0)

假设您在范围内的某处定义了以下列表:

List<String> headers = keyValueList.get(0);

首先,轮询列表以获取标题。

Map<String, String> myMap = new HashMap<String, String>(headers.size());
ListIterator<List<String>> valueLists = keyValueList.listIterator(1);

while(valueLists.hasNext()){
    Iterator<String> values = valueLists.next().iterator();
    Iterator<String> keys = headers.iterator();
    myMap.put(keys.next(), values.next());
}

然后,您可以使用ListIterator迭代所有值。

cloud

然后你就完成了。

答案 3 :(得分:-2)

因为你正在使用排序的ArrayLists,你可能想要使用像LinkedHashMap这样的有序地图,它会保留你插入它们的顺序。

List<List<String>> inputList;
LinkedHashMap<String, List<String>> map = new LinkedHashMap<String, List<String>>();
int nEntries = inputList.get(0).size();

String thisKey;
List<String> thisList;

for(int index = 0; i < nEntries; i++){ //iterate over all column indexes

    for(List<String> thisRow:inputList){
        //if this is the first row, this is our key.
        if(inputList.indexOf(thisRow) == 0){
            thisKey = thisRow.get(index);
            thisList.clear();
        }
        else{
            thisList.add(thisRow.get(index);
        }
    }
    map.put(thisKey,thisList);

}