Сортировка данных пользователей
Есть персональные данные пользователей, которые мы получаем в формате:
Name: Alex
Surname: Ivanov
Age: 35
City: Moscow
и т.д.
Необходимо поменять поля этих данных местами, некоторые вообще выкинуть, но нет возможности поменять изначальные поля, в которые пользователь вводит данные. Т.е. нужно чтобы результатом работы программы стал вывод:
Surname: Ivanov
Name: Alex
City: Moscow
Данные поступают в виде файла с массивом строк, на выходе тоже нужен массив строк. В идеале реализовать это как простое приложение, в которое загружают файл и нажатием кнопки "Сортировать" получается вывод в консоль уже отсортированного списка с нужным порядком строк, либо выгрузку в файл, но это не суть, тут сам разберусь, надеюсь. Вопрос больше по сортировке.
Подскажите каким способом это можно реализовать?
Может есть возможность создать некий шаблон, в который программа будет помещать полученную информацию в нужном нам порядке?
Или данные каждого пользователя помещать в массив, в котором строки будут пронумерованы в нужном нам порядке а потом уже сортировать по возрастанию?
Ответы (1 шт):
public class Test9 {
public static void main(String[] args) {
String text = "Name: Alex Surname: Ivanov Age: 35 City: Moscow\n" +
"Name: Ivan Surname: Petrov Age: 31 City: New-York\n" +
"Name: Tatuyana Surname: Fedorova Age: 18 City: Madrid\n" +
"Name: Fedor Surname: Denisov Age: 44 City: London\n";
List<Person>people=getList(text); //получаем список людей
print(people); //выводим на экран нужные поля людей и отсортированные согласно компоратору в методе
// можно в параметры метода принт передать поля, которые нужно выводить на экран
}
public static List<Person> getList(String text){
//Парсим все строки и превращаем их в людей, и добавляем в Лист
//В зависимости от формата входных данных парсить можно по-разному:
//регулярные выражения, методы Стринга - сплит, сабстринг и т.д.
List<Person>people = new ArrayList<>();
String [] array = text.split("\n");
for(int i=0;i<array.length;i++)
{
String [] inAr = array[i].split(" ");
people.add(new Person(inAr[1],inAr[3],Integer.valueOf(inAr[5]),inAr[7]));
}
return people;
}
public static void print(List<Person> people){
// в этом методе выбираем уже какие поля выводить, какие не выводить. По какому полю
// отсортировать людей и т.д. выходные данные в зависимости от цели, можете вернуть строкой,
// записать в файл и т.д.
//создаем Компоратор - по которому будем сортировать людей, у меня это будет возраст:
//при необходимости можно создать различные компораторы и передавать в метод тот, который необходим:
Comparator<Person> comparator= (o1, o2) -> o1.age-o2.age;
people.sort(comparator); //сортируем людей по компоратору выше
//Вывод на экран нужных полей:
for(Person person: people){
System.out.println("Surname: "+person.surname);
System.out.println("Name: "+person.name);
System.out.println("Age: " + person.age);
System.out.println();
}
}
}
class Person{
String name;
String surname;
int age;
String city;
public Person(String name, String surname, int age, String city) {
this.name = name;
this.surname = surname;
this.age = age;
this.city = city;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", surname='" + surname + '\'' +
", age=" + age +
", city='" + city + '\'' +
'}';
}
}
Выход:
Surname: Fedorova
Name: Tatuyana
Age: 18
Surname: Petrov
Name: Ivan
Age: 31
Surname: Ivanov
Name: Alex
Age: 35
Surname: Denisov
Name: Fedor
Age: 44
Process finished with exit code 0