Извлечение приложений с последними версиями из файла - PullRequest
0 голосов
/ 07 февраля 2019

Существует файл, содержащий имена приложений с их множественной версией: (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 по значениям, так как она содержит строки с номером. Пожалуйста, помогите

1 Ответ

0 голосов
/ 07 февраля 2019

Предполагая, что в вашем файле нет цифр, кроме номера версии, вы можете создать свой собственный компаратор, например:

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")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...