java - 从文件中提取具有最新版本的应用程序
问题描述
有一个文件包含多个版本的应用程序名称:(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+", "")
允许您摆脱字符串中的任何非数字符号。
接下来collect
从 java 8 获取每个应用程序使用的最新版本:
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")));
推荐阅读
- javascript - .toArray 不工作
- opencv - 如果小于 ROI 矩形,如何将其大小增加到 100x100?
- java - 如何使用 aws aws-codebuild、codedeploy、cloudformation 的服务为 aws lambda 与 java 配置持续集成
- docker - 将 AWS Codebuild 环境变量注入 Dockerfile
- ruby-on-rails - 如何在选择选项(simple_form rails)中添加价值?
- javascript - 如何在javascript中提示shell命令的执行状态?
- c++ - 类有一个 selftype 的对象
- python - 尝试使用一个类,但在 Kivy 中出现 NoneType 错误
- sql - 如何计算两个日期列的出现次数并仅在一张表中显示?
- image - 从单元格中删除图像并显示新单元格高度的问题