因此,我有一个文件夹名称列表,我想用关键字“-”分隔并存储在地图中。在该文件夹列表中,'-'字符之前可能有多个名称,因此我想获取所有包含相同键的值并将其存储为该值。以后,“-”字符后的名称也可能会有所不同。例如,这是我拥有的一些文件夹名称:
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)添加,但是可能会有更多键,因此可能不太好。
答案 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]);
}