Hashmap中的键的多个值

时间:2019-03-20 14:53:33

标签: java

因此,我有一个文件夹名称列表,我想用关键字“-”分隔并存储在地图中。在该文件夹列表中,'-'字符之前可能有多个名称,因此我想获取所有包含相同键的值并将其存储为该值。以后,“-”字符后的名称也可能会有所不同。例如,这是我拥有的一些文件夹名称:

20190220103811-2019_Release_1
20190304201669-master
20190314142918-2019_Release_1
20190314143655-develop
20190315134912-2019_Release_1
20190315135106-develop
20190315143607-develop 

对于所有开发人员,我想存储开发键的值,其余的都保存。这是我到目前为止的内容:

File[] filteredDirectoryList = file.listFiles(textFilter);
        String[] splitArr = new String[filteredDirectoryList.length];
        ArrayList<String> listOfBuiltDate = new ArrayList<>();

        // looping through, splitting by '-' and adding it to a map
        for(File temp : filteredDirectoryList) {
            System.out.println(temp.getName());
            splitArr = temp.getName().split("-");


            if(temp.getName().contains(splitArr[1])) {
                listOfBuiltDate.add(splitArr[0]);
            }

            listOfDirectories.put(splitArr[1], listOfBuiltDate);
        }

我当前的输出是:

Key=2019_Release_1, Value=[20190220103811, 20190304201669, 20190314142918, 20190314143655, 20190315134912, 20190315135106, 20190315143607]
Key=develop, Value=[20190220103811, 20190304201669, 20190314142918, 20190314143655, 20190315134912, 20190315135106, 20190315143607]
Key=master, Value=[20190220103811, 20190304201669, 20190314142918, 20190314143655, 20190315134912, 20190315135106, 20190315143607]

但是我希望它是:

Key=2019_Release_1, Value=[20190220103811, 20190314142918, 20190315134912]
Key=develop, Value=[20190314143655, 20190315135106, 20190315143607]
Key=master, Value=[20190304201669]

我不确定如何将这些值添加到列表并将其添加到地图。我当时在考虑添加多个列表,这些列表只会基于每个键(2019_Release_1)添加,但是可能会有更多键,因此可能不太好。

1 个答案:

答案 0 :(得分:1)

您的方法是正确的,但是您不能对所有条目使用相同的列表

每个

必须具有列表

因此,您的 HashMap 需要更改为:

HashMap<String, List<String>> listOfDirectories = new HashMap<>();

然后像这样填充它:

for(File temp : filteredDirectoryList) {

    splitArr = temp.getName().split("-");

    //HERE IS WHERE YOU CREATE THE NEW LIST IF THE KEY DOESN'T HAVE IT
    if(!listOfDirectories.containsKey(splitArr[1])) {
        listOfDirectories.put(splitArr[1], new ArrayList<>());
    } 

    listOfDirectories.get(splitArr[1]).add(splitArr[0]);
}