gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:47:37 24 4
gpt4 key购买 nike

有一个文件包含应用程序名称及其多个版本:(v1,v2,v3)需要仅打印具有应用程序名称的最新版本(v3)的文件。

文件内容:

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();
}
}

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

最佳答案

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

Comparator<String> versionComparator = 
Comparator.comparingDouble(s -> Double.valueOf(s.replaceAll("\\D+", "")));

replaceAll("\\D+", "") 允许您删除字符串中的任何非数字符号。

接下来要获取每个应用程序的最新版本,请使用 java 8 中的 collect :

Map<String, Optional<String>> map = Files.lines(Paths.get(PATH_TO_FILE))
.collect(groupingBy(s -> s.split(" ")[0], maxBy(versionComparator)));

现在只需打印它

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

关于java - 从文件中提取具有最新版本的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54574533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com