Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从列表中获取记录的最高版本_Java - Fatal编程技术网

Java 如何从列表中获取记录的最高版本

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>

我有将近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>();
    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
    ,它有两个属性,即String
    fileName
    和integer
    version
    作为属性
  • 在创建
    名称列表时创建
    列表
  • 为类
    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);
    }
    
    这里要做的是:

  • 对于每个文件,使用拆分获取其名称和版本
  • 然后检查您是否已经使用该名称处理了文件(所有处理的文件都存储在newestFiles映射中)
  • 如果未对其进行处理,请将其添加到带有当前文件的地图中 版本(在
    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