Использование Collections.sort () со списком объектных массивов с несколькими переменными - PullRequest
0 голосов
/ 16 марта 2019

Будет ли Collections.sort () работать при сортировке по списку Make in a Car Array List? После добавления значения NULL я не получаю сообщений об ошибках, но моя цель, в частности, отсортировать их по Make, но я не совсем уверен, как это сделать.

public void readingFromFile(String file) throws FileNotFoundException //an object array that takes in string files
         {  
            try {
                File myFile = new File(file); //converts the parameter string into a file
                Scanner scanner = new Scanner(myFile); //File enables us to use Scanner
                String line = scanner.nextLine(); //reads the current line and points to the next one
                StringTokenizer tokenizer = new StringTokenizer(line, ","); //tokenizes the line, which is the scanned file

                 //counts the tokens 
                while (tokenizer.hasMoreTokens()){
                    String CarMake = tokenizer.nextToken(); //since car is in order by make, model, year, and mileage
                    String CarModel = tokenizer.nextToken();
                    int CarYear1 = Integer.parseInt(tokenizer.nextToken());
                    int CarMileage1 = Integer.parseInt(tokenizer.nextToken()); //converts the String numbers into integers
                    Car cars = new Car(CarMake, CarModel, CarYear1, CarMileage1); //since the car has a fixed order 
                    arraylist.add(cars); //add the cars to the unsorted array
                }
              scanner.close(); //close the scanner  
            } catch (FileNotFoundException f){
                f.printStackTrace();
                return;
            }
            arraylist2.addAll(arraylist);
            Collections.sort(arraylist2, null);
         }

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Начиная с Java 8, в List есть метод sort , унаследованный Collection.Кроме того, вы можете использовать класс Comparator для создания компаратора очень просто:

arraylist2.sort(Comparator.comparing(Car::getMake));

Если вы хотите использовать несколько параметров для сортировки, вы можете легко добавить их:

arraylist2.sort(Comparator.comparing(Car::getMake)
    .thenComparing(Car::getYear)
    // ...
);

Если вы используете версию Java ниже Java 8, вы должны самостоятельно реализовать логику сортировки в Comparator или использовать внешнюю библиотеку:

Collections.sort(arraylist2, new Comparator<Car>() {
    @Override
    public int compare(Car a, Car b) {
        return a.getMake().compareTo(b.getMake());
    }
});

Для нескольких параметров это будет выглядеть следующим образом:

Collections.sort(arraylist2, new Comparator<Car>() {
    @Override
    public int compare(Car a, Car b) {
        int compareMake = a.getMake().compareTo(b.getMake());
        if (compareMake != 0) {
            return compareMake;
        }
        return a.getYear() - b.getYear();
    }
});
0 голосов
/ 16 марта 2019

Использовать API потоковой передачи:

sorted = arrayList2.stream().sorted(Comparator.comparing(Car::getMake));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...