У меня есть карта, которая была отсортирована по алфавиту, преобразуя ее с помощью TreeMap. Карта содержит как String (имя файла установщика), так и Path (путь установщика в файловой системе), например Установщики карт;Получение последнего аналогичного объекта из карты в Java
Мне нужно получить самое последнее имя файла установщика. Однако регулярное выражение кажется слишком сложным.
Код я в настоящее время, чтобы отобразить монтажников и их пути заключается в следующем:
Map<String, Path> installers = findInstallers();
Set s = installers.entrySet();
Iterator it = s.iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
String installerFile = (String) entry.getKey();
Path installerPath = (Path) entry.getValue();
System.out.println(installerFile + " ==> " + installerPath.toString());
}
System.out.println("================================");
private Map<String, Path> findInstallers() {
HashMap<String, Path> installerPathMap = new HashMap<>();
try {
Path productReleasePath = Paths.get("C:", "test");
List<Path> allPaths = Files.walk(productReleasePath)
.filter(Files::isRegularFile)
.collect(Collectors.toList());
allPaths.forEach(path -> {
if (!path.toFile().getName().toLowerCase().endsWith(".log")) {
String installerFiileName = path.toFile().getName();
installerPathMap.put(installerFiileName, path);
}
});
} catch (IOException e) {
e.printStackTrace();
}
return new TreeMap<>(installerPathMap);
}
Это пример вывода:
Client_1.exe ==> C:\test\build_1\Win32\Client_1.exe
Client_5.exe ==> C:\test\build_5\Win32\Client_5.exe
Client_6.exe ==> C:\test\build_6\Win32\Client_6.exe
Server_1.exe ==> C:\test\build_1\Win64\Server_1.exe
Server_2.exe ==> C:\test\build_2\Win64\Server_2.exe
Server_Linux_1.tar.gz ==> C:\test\build_1\Linux32\Server_Linux_1.tar.gz
Server_Linux_2.tar.gz ==> C:\test\build_2\Linux32\Server_Linux_1.tar.gz
================================
мне нужно сократить мою карту, чтобы содержать только самый высокий ключ и его пара значений, поэтому выход аналогичен этому:
Client_6.exe ==> C:\test\build_6\Win32\Client_6.exe
Server_2.exe ==> C:\test\build_2\Win64\Server_2.exe
Server_Linux_2.tar.gz ==> C:\test\build_2\Linux32\Server_Linux_1.tar.gz
================================
Любая помощь будет большой я оценил.
К сожалению, для имен файлов установки не существует стандартного соглашения об именах. У некоторых есть тире в названии, у других - подчеркивания, но это должно быть хорошей отправной точкой. У других есть полный номер версии, а только номер сборки. Например: 'code' WebAgent-1.2.3.zip Спасибо за помощь! – user7497643