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

标签 java

我有近 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/

相关文章:

java - java中的矩阵操作

java多线程和mysql

java - 如何根据条件获取字符串的特定部分?

java - 从文件中读取直到特定的字符序列

java - 如何将 html 与 gwt 小部件混合?

java - 在位图上绘制固定位置的文本

java - 为什么编译器不识别元模型属性?

java - 在电子邮件android的邮件正文中发送图像

java - 如何在 SQL Wrapper 类中返回 ResultSet

java - Glassfish JNDI 树链接