Сортировать мой массив по тому, как другой массив получил сортировку? [Дубликат]

Вы можете сделать:

\bjack\b.*\bjames\b|\bjames\b.*\bjack\b
0
задан Axwell Smith 18 January 2019 в 11:07
поделиться

1 ответ

Есть много вещей, которые необходимо оценить и исправить в коде.

Во-первых, zipCode, cityName и l недоступны вне их функции. zipCode и cityName должны быть свойствами класса. Но это все еще не то, что вы хотите.

Если я вас правильно понял, вы хотите обработать ArrayList of Cities, у каждого города есть ZipCode и CityName. Вы должны сначала понять, как определить ваши классы. Итак, мы только что выяснили класс с именем City, который имеет два свойства, давайте определим его:

public class City {

    private int zipCode;
    private String cityName;

    public City(int zipCode, String cityName) {
        this.zipCode=zipCode;
        this.cityName=cityName;
    }

    public int getZipCode() {
        return zipCode;
    }

    public String getCityName() {
        return cityName;
    }

}

Теперь вам нужен класс (возможно, основной класс), который будет содержать ArrayList из Cities (ArrayList<City>) Обратите внимание, что каждый элемент в этом массиве является переменной типа City - поэтому он содержит как zipCode, так и cityName, Теперь, когда вы сортируете этот массив (по zipCode) - весь элемент (Города) будут отсортированы:

 public static void main(String[] args){

 ArrayList<City> cities = new ArrayList<City>();


 cities.add(new City(999,"NINE"));
 cities.add(new City(123,"COOL"));
 cities.add(new City(456,"FUN"));


 for(int i=0;i<cities.size();i++) {
     System.out.println(cities.get(i).getZipCode() + cities.get(i).getCityName());
 }

 Collections.sort(cities, (c1,c2) -> c1.getZipCode()-c2.getZipCode());
 System.out.println();

 for(int i=0;i<cities.size();i++) {
     System.out.println(cities.get(i).getZipCode() + cities.get(i).getCityName());
 }

 } 

результат:

999NINE
123COOL
456FUN

123COOL
456FUN
999NINE

Как работает сортировка?

Collections.sort(cities, (c1,c2) -> c1.getZipCode()-c2.getZipCode());

Функция сортировки коллекций получает ArrayList как первый аргумент и компаратор (функция, которая объясняет КАК сравнивать элементы) в качестве второго аргумента.

Ну, города - это ваш ArrayList (список городов), а компаратор - это функция, которая получает два города (с1 и с2) и возвращает вычитание обоих почтовых индексов (в результате 0 означает, что они равны, в результате получаются отрицательные значения этот почтовый индекс c2 больше, и в результате возможный означает, что почтовый индекс c1 больше).

Ключевые выводы:

  1. Подумайте над определениями классов - какими свойствами обладает каждый класс
  2. Вы не хотите определять новые ArrayList внутри конструктора (если вы хотите, чтобы этот список «жил» вне функции)
  3. Подробнее о ArrayList , Коллекции , Компаратор [1114 ], сортировка.

Надеюсь, это помогло:)

0
ответ дан SomoKRoceS 18 January 2019 в 11:07
поделиться
Другие вопросы по тегам:

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