Java 从文件中提取具有最新版本的应用程序

Java 从文件中提取具有最新版本的应用程序,java,file,collections,Java,File,Collections,有一个文件包含应用程序名称及其多个版本:(v1、v2、v3)只需打印具有最新版本(v3)和appname的文件 文件内容: MailApp AuthenticationAPI v6 Videoapp CallAppAPI v7 MailApp DataStorageAPI v10 Videoapp DataStorageAPI v11 MailApp AuthenticationAPI v11 ChatApp DataStorageAPI v2 ChatApp DataStorageA

有一个文件包含应用程序名称及其多个版本:(v1、v2、v3)只需打印具有最新版本(v3)和appname的文件

文件内容:

MailApp AuthenticationAPI v6
Videoapp CallAppAPI v7  
MailApp DataStorageAPI v10
Videoapp DataStorageAPI v11
MailApp AuthenticationAPI v11
ChatApp DataStorageAPI v2  
ChatApp  DataStorageAPI v3
我编写了以下代码:

public class FileProblem {

    public void readFile() {
        try {
            File file = new File("D:\\cucumber\\Versions.txt");
            BufferedReader fos = new BufferedReader(new FileReader(file));
            String sCurrentLine;
            int i =0;
            String temp;

            ArrayList<String> ar = new ArrayList<String>();
            Scanner s = new Scanner(file);
            //List<String> names = new ArrayList<String>();
            Iterator<String> itr = ar.iterator();
            while ((sCurrentLine = fos.readLine()) != null) {
                String[] arr = sCurrentLine.split(" ");
                Map<String, String> hs = new TreeMap<String, String>();
                //hs.put(arr[0], arr[2]);
                hs.put(arr[0],arr[2]);

                if(arr.length == 4) {
                    System.out.println("arr[3] = " + arr[3]);
                }
                Iterator<Entry<String, String>> itr1 = hs.entrySet().iterator();

                while(itr1.hasNext()) {
                    System.out.println(itr1.next());
                }
            }   
        }
        catch(Exception e) {
            System.out.println(e);
        }
    }

    public static void main(String args[]) {
        FileProblem fp = new FileProblem();
        fp.readFile();
    }
}
公共类文件问题{
公共void readFile(){
试一试{
File File=新文件(“D:\\cumber\\Versions.txt”);
BufferedReader fos=新的BufferedReader(新文件读取器(文件));
弦电流线;
int i=0;
字符串温度;
ArrayList ar=新的ArrayList();
扫描仪s=新扫描仪(文件);
//列表名称=新的ArrayList();
迭代器itr=ar.Iterator();
而((sCurrentLine=fos.readLine())!=null){
字符串[]arr=sCurrentLine.split(“”);
Map hs=新树映射();
//hs.put(arr[0],arr[2]);
hs.put(arr[0],arr[2]);
如果(arr.length==4){
System.out.println(“arr[3]=”+arr[3]);
}
迭代器itr1=hs.entrySet().Iterator();
while(itr1.hasNext()){
System.out.println(itr1.next());
}
}   
}
捕获(例外e){
系统输出打印ln(e);
}
}
公共静态void main(字符串参数[]){
FileProblem fp=新的FileProblem();
fp.readFile();
}
}

但是我一直坚持按值对HashMap进行排序,因为它包含带数字的字符串。请帮助

假设您的文件除了版本号之外没有任何数字,您可以创建自己的比较器,如下所示:

Comparator<String> versionComparator = 
    Comparator.comparingDouble(s -> Double.valueOf(s.replaceAll("\\D+", "")));
现在就把它打印出来

map.forEach((key, value) -> System.out.println(value.orElse("Not Found")));

请将文件内容格式化为原始格式one@Ruslan更新的文件内容我刚刚更新了答案答案有意义吗?@Ruslan谢谢你的回复。我试图编译程序,但遇到了一个错误。另外,我使用的是java 7,所以我正在尝试使其正常工作,现在将java版本更新为8。错误:maxBy方法未定义
map.forEach((key, value) -> System.out.println(value.orElse("Not Found")));