изменить порядок элементов списка массива относительно другого - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть 2 списка массивов

 ArrayList<String> passengerNames= new ArrayList<String>();//stores passenger names
ArrayList<String> seatNumber= new ArrayList<String>();//stores the seat passenger booked 1  seat=1passenger
    passengerNames.add("Ram");
    passengerNames.add("Shyam");
    passengerNames.add("CPS");
    passengerNames.add("John");
    passengerNames.add("Steve");

    seatNumber.add(1);
    seatNumber.add(84);
    seatNumber.add(19);
    seatNumber.add(99);
    seatNumber.add(78);

, поэтому массив passengerNames будет [Ram, Shyam, CPS, John, Steve], а массив seatNumber будет [1, 84, 19, 99, 78] Я хочу отсортировать массив seatNumber в порядке поступления, но я хочу изменить список passengerNames таким образом, чтобы в случае, когда seatNumber находится в порядке добавления, например [1,19,78,84,99], массив passengerNames должен быть отсортирован как [Ram, КПС, Стив, Shyam, Jhon]

Ответы [ 3 ]

3 голосов
/ 06 апреля 2020

Я бы предложил инкапсулировать ваши данные в новый объект Passenger и создать единый ArrayList типа Passenger - это должно поддерживать порядок и гибкость.

public class Passenger {
    private String name;
    private int seatNumber;

    public Passenger(String name, int seatNumber) {
        this.name = name;
        this.seatNumber = seatNumber;
    }
}

... и для создания Passenger ArrayList

List<Passenger> passengers = new ArrayList<Passenger>(); // build Passenger ArrayList
passengers.add(new Passenger("Ram", 1)); // create new Passenger
passengers.add(new Passenger("Shyam", 84)); // etc...

Что касается сортировки списка в порядке возрастания, чистый подход состоит в implement Comparable в классе Passenger и определении поведения в методе compareTo(Passenger p). Как только это определено по вашему вкусу, сортировка может быть вызвана через Collections.sort(passengers);

1 голос
/ 06 апреля 2020

Вместо двух массивов информации, принадлежащих одному объекту, создайте Object Passenger, в котором вы назначаете имя и номер места.

public class Passenger {

    private String name;
    private int seatNumber;

    public Passenger(String name, int seatNumber){
        this.name = name;
        this.seatNumber = seatNumber;
    }
    // setters and getters
}

Теперь просто создайте свой массив пассажиров

ArrayList<Passenger> passengers = new ArrayList<Passenger>();
passengers.add(new Passenger("Ram", 1));

Затем используйте метод сортировки по атрибуту объекта.

Arrays.sort(passengers, Comparator.comparing(Passenger::getSeatNumber));
0 голосов
/ 06 апреля 2020

Похоже, что было бы более целесообразно использовать SortedMap

SortedMap<Integer, String> map = new TreeMap<>();
map.put(1, "Ram");
map.put(84, "Shyam");
map.put(19, "CPS");
map.put(99, "John");
map.put(78, "Steve");

Вам не нужно передавать Comparator в конструкторе в вашем случае, потому что вам нужно, чтобы ключи были в порядке возрастания, это их естественный порядок. Самое интересное, что они будут уже отсортированы, ничего не делая, они будут сортироваться автоматически по мере их добавления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...