如果我有这样的路径文本列表:
folder1/A
folder1/B/H
folder1/C/F
folder2/D
folder2/E
folder2/F
folder3/G
folder3/H
folder3/I
按第一个目录对它们进行分组的最佳方法是什么?
像这样的输出:
folder1 [A, B/H, C/F]
folder2 [D, E, F]
folder3 [G, H, I]
如果我有这样的路径文本列表:
folder1/A
folder1/B/H
folder1/C/F
folder2/D
folder2/E
folder2/F
folder3/G
folder3/H
folder3/I
按第一个目录对它们进行分组的最佳方法是什么?
像这样的输出:
folder1 [A, B/H, C/F]
folder2 [D, E, F]
folder3 [G, H, I]
你可以使用 aMap<String, List<String>>
来做到这一点。
BufferedReader
或等效)"/"
并获取主文件夹(在您的情况下folder1, folder2
)map
,如果键存在,则获取值List<String>
并添加路径(即B/H, A
等)编辑:完整列表
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ParseFolders {
public static Map<String, List<String>> parse(List<String> input) {
Map<String, List<String>> res = new HashMap<String, List<String>>();
for(String s : input) {
String [] arr = s.split("/");
String key = arr[0];
String val = s.substring(s.indexOf("/"));
if(res.containsKey(key)) {
res.get(key).add(val);
}
else {
List<String> folders = new ArrayList<String>();
folders.add(val);
res.put(key, folders);
}
}
return res;
}
/**
* @param args
*/
public static void main(String[] args) {
List<String> input = new ArrayList<String>();
input.add("folder1/A");
input.add("folder1/B/H");
input.add("folder1/C/F");
input.add("folder2/D");
input.add("folder2/E");
input.add("folder2/F");
input.add("folder3/G");
input.add("folder3/H");
input.add("folder3/I");
System.out.println(parse(input));
}
}
和输出
{folder1=[/A, /B/H, /C/F], folder3=[/G, /H, /I], folder2=[/D, /E, /F]}
假设您有一个字符串列表ls
作为包含所有字符串的输入:
Map<String, List<String>> map = new HashMap<>();
for(String s: ls){
String[] k = s.split("/");
if(k.length<2)
throw new RuntimeException("Invalid input");
if(map.get(k[0]==null)
map.put(k[0], new ArrayList<String>());
map.get(k[0]).add(Arrays.asList(Arrays.copy(k,1,k.length));
}