Сортированный список элементов в коллекции - PullRequest
0 голосов
/ 01 мая 2020

Я искал справку на странице с таким же названием, как у этой темы: https://help.anylogic.com/index.jsp?topic=%2Fcom.anylogic.help%2Fhtml%2Fdata%2FSort_Collection.html

Как показано на странице, если вы хотите отсортировать список по возрастанию или убыванию порядок вы использовали sortAscending или sortDescending. В приведенном примере список людей отсортирован по возрасту или времени, а также по доходам в другое время.

List sortedByAgeAsc = sortAscending( people, p -> p.age ); List sortedByIncomeDesc = sortDescending( people, p -> p.income );

Что делать, если я хочу отсортировать список по двум полям в в то же время? Как и в этом списке людей, я хочу отсортировать по возрастанию дохода и по возрасту, чтобы первым элементом отсортированного списка был самый старый человек с самым низким доходом. Если я запускаю их один за другим, то же самое происходит после запуска второго. Я пытался использовать оператор внутри одного оператора, но это не сработало

1 Ответ

0 голосов
/ 01 мая 2020

Вам необходимо использовать Java компараторы, см., Например, Сортировка списка в Java с использованием 2 критериев

Вот пример реализации компаратора в коде AnyLogi c , но только с использованием 1 критерия. Он сравнивает агентов, живущих в пространстве ГИС, с указанным c местоположением (getXYZ()):

ArrayList<MyAgent> listOfAgents= new ArrayList<MyAgent>(); 
// fill this with agents next

Collections.sort(listOfAgents, new Comparator<MyAgent>() {
    @Override
    public int compare(MyAgent agent1, MyAgent agent2) {
        return Double.compare(main.myGISNetwork.getDistance(agent1.getXYZ(), getXYZ()), main.myGISNetwork.getDistance(agent2.getXYZ(), getXYZ()));` 
    }
});
...