@pfedorov031090

Сортировка списка String по заданному слову в строке. Как написать компаратор?

Необходимо считать несколько строк из файла, отсортировать их по слову (по алфавиту), номер которого введет пользователь. Не получается сортировка, не понимаю как написать компаратор по слову.
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        String path = "src/text";
        String outSort1 = "src/output1";
        String line = "";
        int input = 0;
        Scanner scn = new Scanner(System.in);
        ArrayList<String> list = new ArrayList<>();
        try {
            BufferedReader br = new BufferedReader(new FileReader(path));
            while((line = br.readLine()) != null){
                list.add(line);
            }
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("Введите номер слова для сортировки: ");
        input = scn.nextInt();
        int finalInput = input;
        Collections.sort(list, new Comparator<String>() {
            public int compare(String o1, String o2) {
                return list.get(0).split(" ")[finalInput].compareTo(list.get(1).split(" ")[finalInput]);
            }
        });
        write(list, outSort3);

    }


    public static void write (ArrayList<String> list, String path) {
        try {
            PrintWriter printWriter = new PrintWriter(path);
            for (int i = 0; i < list.size(); i++) {
                printWriter.println(list.get(i));
                printWriter.flush();
            }
            printWriter.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

}
  • Вопрос задан
  • 181 просмотр
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
return list.get(0).split(" ")[finalInput].compareTo(list.get(1).split(" ")[finalInput]);

Вот здесь твоя ошибка. Компаратор вообще ничего не должен знать про список, попробуй вынести это в отдельный класс, и увидишь, что не получается.
То, что надо сравнивать, приходит на вход методу compare. Это две строки, которые нужно сравнить, а ты их не используешь. Их споить и сравнивай.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы