как отсортировать значения свойств приложения - PullRequest
1 голос
/ 15 октября 2019

Можно ли отсортировать интерфейс List с объектом ArrayList()?

List</*classname*/> list = new ArrayList<>();

Я использую application.properties Spring boot для установки значения вИнтерфейс списка

ModuleNames.java

public class ModuleNames {

    private String moduleId;
    private String moduleName;

    //getters & setters.
}

Контроллер

@RequestMapping(value = "/getModuleNames", method = { RequestMethod.GET })
public @ResponseBody List<String> getModuleNames() {

        List<ModuleNames> moduleNamesList = new ArrayList<>();
        moduleNamesList.add(new ModuleNames("Country", env.getProperty("bulkUpload.location.country")));
        moduleNamesList.add(new ModuleNames("State", env.getProperty("bulkUpload.location.state")));
        moduleNamesList.add(new ModuleNames("City", env.getProperty("bulkUpload.location.city")));
        moduleNamesList.add(new ModuleNames("Area Pincode", env.getProperty("bulkUpload.location.areaPincode")));

        return moduleNamesList;

Кто-нибудь знает, как отсортировать список.

Я пробовал

  1. moduleNamesList.sort(Comparator.naturalOrder());

  2. Collections.sort(moduleNamesList);

, но оба, похоже, не работают. Пожалуйста, помогите мне здесь

Ответы [ 3 ]

1 голос
/ 15 октября 2019
moduleNamesList.sort(Comparator.comparing(ModuleNames::getName));
moduleNamesList.sort(Comparator.comparing(mn -> mn.name));

Или еще больше отсортировано:

moduleNamesList.sort(Comparator.comparing(ModuleNames::getName)
                     .thenComparing(ModuleNames::getId));
1 голос
/ 15 октября 2019

Вы можете избежать определения логики сравнения, используя ссылку на метод экземпляра и метод Comparator.comparing, который извлекает и создает Comparable на основе этой функции.

Мы собираемся использовать геттеры для построениялямбда-выражение.

сортировка списка по moduleName:

moduleNamesList.sort(Comparator.comparing(ModuleNames::getModuleName));

сортировка списка по moduleName в обратном порядке:

moduleNamesList.sort(Comparator.comparing(ModuleNames::getModuleName).reversed());

сортировка списка по первому moduleName, а затем moduleId:

moduleNamesList.sort(Comparator.comparing(ModuleNames::getModuleName).thenComparing(ModuleNames::getModuleId));

Вы также можете использовать собственный компаратор: Использовать эту ссылку

1 голос
/ 15 октября 2019

Вам нужно написать свой собственный компаратор для объекта ModuleNames, потому что Java не знает, как его отсортировать, поскольку он не является примитивным типом.

Например:

Collections.sort(moduleNamesList, new Comparator<ModuleNames>() {
        @Override
        public int compare(ModuleNames o1, ModuleNames o2) {
            return o1.getModuleId().compareTo(o2.getModuleId());
        }
    });

или

moduleNamesList.sort(new Comparator<ModuleNames>() {
        @Override
        public int compare(ModuleNames o1, ModuleNames o2) {
            return o1.getModuleName().compareTo(o2.getModuleName());
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...