我有近 500 个文件。每个文件有近5个版本或10个版本同名。每个文件以文件名开头,后跟分号,然后是版本号。
示例:
Test.pdf;1 Test.pdf;2 Test.pdf;3
所以我通过这样做来获取文件列表:
File file = new File(Path + "\\");
File[] fileList = file.listFiles();
List<String> namesList = new ArrayList<String>();
for (int i = 0; i < fileList.length; i++) {
String name=fileList[i].getName();
if(name.contains(".pdf")||name.contains(".excel")){
namesList.add(name);
}
for (int i = 0; i < namesList.size(); i++) {
String name = namesList.get(i);
}
如何仅获取最高版本文件,即 test.pdf;3
最佳答案
使用Map
将每个文件名映射到一个版本。迭代文件名,提取名称部分和版本部分,然后将该版本与 map 中先前保存的版本进行比较。如果 map 中没有某个名称的版本,则将 map 中的实际版本作为最高版本。
你可以尝试这样的事情:
@Test
public void listHighestVersion() {
String[] fileNames = {
"Test.pdf;1", "Test.pdf;2", "Test.pdf;3",
"Test.excel;1", "Test.excel;4", "Test.excel;3",
};
Map<String, Integer> fileVersionMap = new HashMap<>();
for(String fileNameWithVersion : fileNames) {
String[] split = fileNameWithVersion.split(";", 2);
if(split.length > 1) {
String fileName = split[0];
Integer fileVersion;
try {
fileVersion = Integer.parseInt(split[1]);
} catch(NumberFormatException e) {
fileVersion = 0;
}
Integer version = fileVersionMap.get(fileName);
if(version == null || fileVersion > version) {
fileVersionMap.put(fileName, fileVersion);
}
}
}
System.out.println(fileVersionMap);
}
输出为:
{Test.excel=4, Test.pdf=3}
关于java - 如何从列表中获取记录的最高版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25460469/