a.compareTo(a);
-> здесь вы сравниваете эти два и ничего не делаете с результатом. Этот метод CompareTo просто возвращает значение типа int, представляющее, что одно больше другого. В вашем случае вы сравниваете А с А, поэтому всегда получаете 0.
Вам нужно отсортировать свою коллекцию, используя этот компаратор. У Java есть хороший метод сортировки, который берет список сопоставимых элементов и сортирует их. Вы можете попробовать с:
Collections.sort(persons);
for (Person a : persons)
{
bufferedFileWriter.write (a.toString());
bufferedFileWriter.newLine();
}
Тем не менее, коллекция людей будет отсортирована. Если вы хотите иметь его начальное состояние после этого, вы можете просто скопировать его в новую коллекцию перед сортировкой.
Еще один способ сделать это - через API потока, который будет выглядеть примерно так:
for (Person a : list.stream().sorted((p1, p2)->p1.
compareTo(p2)).
collect(Collectors.toList()))
{
bufferedFileWriter.write (a.toString());
bufferedFileWriter.newLine();
}
Если это вызывает проблемы с памятью, потому что оба решения создают копию отсортированного массива в памяти, вы можете сделать что-то вроде поиска по списку - например, два вложенных цикла или что-то в этом роде, но, на мой взгляд, это излишество