Сортировка данных из файла

#java #file

Вопрос:

Прежде всего: Извините за мой уровень английского. Я стараюсь учиться лучше. Итак, моя проблема в следующем: у меня есть файл txt и данные в файле, подобном этому:

  1. Хворостовский 8(количество песен, точно не знаю, просто для примера) Россия.
  2. Чайковского 9(то же самое здесь) Россия.

Мне нужно отсортировать по количеству песен от самых больших до самых маленьких или от самых маленьких до самых больших(это не имеет значения). Что я сделал:

 public void onMouseClick(MouseEvent mouseEvent) {
        char separator = '.';
        ArrayList<String> listOfLines = readFileInArray();
        for(String s: listOfLines){
            char maxValue = '0';
            for(int i = 0; i < s.length(); i  ){
                if(s.charAt(i) == separator){
                    if(Character.getNumericValue(maxValue) < s.charAt(i   1)){
                        maxValue = s.charAt(i   1);
                        System.out.println(maxValue);
                    }
                }
            }
        }
    }

 

У меня есть ArrayList, содержащий данные из файла, и я понял, как найти количество песен в файле, но я не знаю, как их отсортировать.

Комментарии:

1. Почему вы разделяете на».», если ввод «Название 8 стран»?

2. @MostNeededRabbit Я забыл об этом. Я добавил символ».», который помогает мне найти количество песен. Вот так: Чайковский. 8 Россия. Я сделал цикл, в котором я могу проверить, равен ли символ». » затем я печатаю символ[i 1], и это всегда количество песен.

3. Поэтому я не понимаю, являются ли ваши данные, которые вы хотите отсортировать, данными Чайковского. 8 Россия или Чайковский 8 Россия или Чайковский. 8.Россия

4. это всегда однозначное число?

5. Это не имеет значения. Символ». » помогает мне найти количество песен. Я знаю, что могу разделить на «» в классе String, но для меня это будет намного сложнее.

Ответ №1:

Основываясь на описании входных данных, вы можете сделать:

  List<String> lines = Arrays.asList("Chaikovsky.9 Russia", "Hvorostovsky.8 Russia", "OtherName.21 Russia");

 List<String> sortedLines = lines.stream()
         .sorted((s1, s2) -> {
            int l1 = s1.indexOf('.')   1;
            int l2 = s2.indexOf('.')   1;
            int n1 = Integer.parseInt(s1.substring(l1, s1.indexOf(' ', l1)));
            int n2 = Integer.parseInt(s2.substring(l2, s2.indexOf(' ', l2)));
            return Integer.compare(n1, n2); 
         })
         .collect(Collectors.toList());
 

Выход:

 [Hvorostovsky.8 Russia, Chaikovsky.9 Russia, OtherName.21 Russia]
 

Комментарии:

1. Большое спасибо. Хорошего вам дня 🙂

2. еще раз привет 🙂 Как я могу сравнить такие данные, как строка, с вашим методом? Мне нужно отсортировать страны по алфавиту. Вот мой код: pastebin.com/LNnsKs6P Мои данные сейчас в файле: Чайковский.9-Россия

3. Список<Строка> Сортированные строки = строки.поток() .сортированный((s1, s2) -<Строка>> { int l1 = s1.Индекс(‘-‘) 1; int l2 = s2.Индекс(‘-‘) 1; возврат s1.подстрока(l1).Сопоставление(s2.подстрока(l2)); }) .сбор(Сборщики. тоЛист());

4. @Staaankey см. мой комментарий выше ^^

5. получите ошибку в строке возврата с сообщением «статический метод может быть вызван только для содержащего класса интерфейса». Извините, если я вас беспокою.