У меня есть проект, в котором основной функцией является чтение .txt-файла в массив String и сортировка его по определенному строковому значению в каждой строке. Мой .txt-файл - это список сотрудников с их именем, зарплатой и опытом. Ниже приведен список моих свидетелей:Сортировка массива String по определенному значению String
- Наименование: Thomas Green | Валовая зарплата: 10 000 | Опыт работы: 30 месяцев
- Имя: Anna Lang | Валовая зарплата: 6 000 | Опыт: 12 месяцев
- Имя: Micheal Holse | Валовая зарплата: 8 000 | Опыт: 27 месяцев
Теперь я хочу сортировать этот список с помощью имени, значения зарплаты или опыта, после использования сканера для изменения этого списка в массив. Я прочитал о компараторе, но не смог найти правильный пример. Как вы видите, что нужно сделать этой программе, это пропустить значение «Имя:» и отсортировать его по алфавиту по имени. Или пропустите другие строки и отсортируйте список по наименьшей зарплате. То же самое для опыта он должен сортировать в течение нескольких месяцев от самого низкого до самого высокого.
Вот что я мог сделать, до сих пор:
import java.io.File;
import java.io.IOException;
import java.util.*;
public class SortList {
public static int loadInt() {
Scanner s = new Scanner(System.in);
if(!s.hasNextInt()) {
s.next();
s.nextLine();
return loadInt();
}
return s.nextInt();
}
public static void main (String[] args) throws IOException{
//show the list
String token1 = "";
Scanner inFile1 = new Scanner (new File ("list.txt")).useDelimiter(",\\s*");
List<String> temps = new ArrayList<String>();
while(inFile1.hasNext()) {
token1 = inFile1.next();
temps.add(token1);
}
inFile1.close();
String[] tempsArray = temps.toArray(new String[0]);
for(String s : tempsArray) {
System.out.println(s);
}
//Sort the list
System.out.println("How do you want to sort?" + "\n" + "1. By name" + "\n" + "2. By salary" + "\n" + "3. By experience");
int b;
b = loadInt();
if (b == 1){
ArrayList<String> namesList = new ArrayList<>();
for(int i = 0; i<tempsArray.length; i++){
namesList.add(tempsArray[i]);
}
Collections.sort(namesList, (name1, name5) -> name1.split(" ")[1].compareTo(name5.split(" ")[1]));
for(String name : namesList){
System.out.println(name);
}
}
if (b == 2){
ArrayList<String> salaryList = new ArrayList<>();
for(int i = 0; i<tempsArray.length; i++){
salaryList.add(tempsArray[i]);
}
Collections.sort(salaryList, (salary1, salary2) -> salary1.split(" ")[10].compareTo(salary2.split(" ")[10]));
for(String salary : salaryList){
System.out.println(salary);
}
}
if (b == 3){
ArrayList<String> experienceList = new ArrayList<>();
for(int i = 0; i<tempsArray.length; i++){
experienceList.add(tempsArray[i]);
}
Collections.sort(experienceList, (experience1, experience2) -> experience1.split(" ")[14].compareTo(experience2.split(" ")[14]));
for(String experience : experienceList){
System.out.println(experience);
}
}
}
}
На данный момент мой код не сортирует список, когда я вхожу в целое значение. Правильно ли я это делаю? Я нашел пример коллекции через интернет, но это не работает для меня.
Настоящая вещь заключается в том, что вам нужна разумная модель «объекта», прежде чем что-либо делать с этими различными предметами сортировки. В этом смысле ответ от димо является ** абсолютным обязательно ** для вас, чтобы заглянуть. – GhostCat
Спасибо за объяснение. Но если я создам объект под названием Employee, как я собираюсь загрузить список из txt-файла? Я новичок в Java, поэтому я не могу себе представить, как загрузить объект из txt-файла. –
Ничего себе, потратил некоторое время, чтобы написать ответ для вас. Надеюсь, что это поможет, поскольку у меня возникло смутное чувство, что я даже не увижу много преимуществ для этого ... – GhostCat