Java 如何从列表中获取记录的最高版本
我有将近500个文件。每个文件有近5个版本或10个同名版本。每个文件以文件名和分号开头,然后是版本号 例如: Test.pdf;1. Test.pdf;2. Test.pdf;三, 因此,我通过以下操作获取文件列表:Java 如何从列表中获取记录的最高版本,java,Java,我有将近500个文件。每个文件有近5个版本或10个同名版本。每个文件以文件名和分号开头,然后是版本号 例如: Test.pdf;1. Test.pdf;2. Test.pdf;三, 因此,我通过以下操作获取文件列表: File file = new File(Path + "\\"); File[] fileList = file.listFiles(); List<String> namesList = new ArrayList<String>
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);
}
File File=新文件(路径+“\\”);
File[]fileList=File.listFiles();
List namesList=new ArrayList();
for(int i=0;i
如何仅获取最高版本的文件,即test.pdf;3
FileDetail
,它有两个属性,即StringfileName
和integerversion
作为属性名称列表时创建列表
FileDetail
实现comparable
或comparator
,并实现排序逻辑使用
映射
将每个文件名映射到一个版本。迭代文件名,提取名称部分和版本部分,然后将版本与映射中以前保存的版本进行比较。如果映射中没有名称的版本,则将映射中的实际版本作为最高版本
您可以尝试以下方法:
@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);
}
您可以使用如下所示的代码:
String[] files = {"test.pdf;3","test.pdf;1","differentTest.pdf;2","test.pdf;5","test.pdf;4", "test.excel;3","test.excel;1","test.excel;6","test.excel;5","test.excel;4"};
HashMap <String, Integer> newestFiles = new HashMap<String, Integer>();
for (String currentString : files) {
String currentFileName = currentString.split(";")[0];
Integer currentFileVersion = Integer.parseInt(currentString.split(";")[1]);
if (newestFiles.containsKey(currentFileName)) {
if (newestFiles.get(currentFileName) < currentFileVersion) {
newestFiles.put(currentFileName, currentFileVersion);
}
}
else {
newestFiles.put(currentFileName, currentFileVersion);
}
}
for (Entry<String, Integer> maxValue : newestFiles.entrySet()) {
String result = new StringBuilder("Max version of file: ").append(maxValue.getKey()).append(" is: ").append( maxValue.getValue()).toString();
System.out.println(result);
}
这里要做的是:
else
语句中)是
Test.pdf;1 Test.pdf;2 Test.pdf;3
真实文件名(在文件系统中)或者您有某种csv?子字符串filename with;。您将获得版本和文件名。将其存储在hashmap中。如果旧版本小于新版本,则替换map中的值。您可以为我演示任何示例吗?谢谢,伙计,让我尝试使用it@Mayur,不客气。请注意,您应该根据需要处理异常,例如,如果没有附加到文件的版本,或者如果版本部分不是有效的整数,则在上面的代码中,它只是默认为0
。
String[] files = {"test.pdf;3","test.pdf;1","differentTest.pdf;2","test.pdf;5","test.pdf;4", "test.excel;3","test.excel;1","test.excel;6","test.excel;5","test.excel;4"};
HashMap <String, Integer> newestFiles = new HashMap<String, Integer>();
for (String currentString : files) {
String currentFileName = currentString.split(";")[0];
Integer currentFileVersion = Integer.parseInt(currentString.split(";")[1]);
if (newestFiles.containsKey(currentFileName)) {
if (newestFiles.get(currentFileName) < currentFileVersion) {
newestFiles.put(currentFileName, currentFileVersion);
}
}
else {
newestFiles.put(currentFileName, currentFileVersion);
}
}
for (Entry<String, Integer> maxValue : newestFiles.entrySet()) {
String result = new StringBuilder("Max version of file: ").append(maxValue.getKey()).append(" is: ").append( maxValue.getValue()).toString();
System.out.println(result);
}
Max version of file: test.excel is: 6
Max version of file: test.pdf is: 5
Max version of file: differentTest.pdf is: 2