Java - сортировка - компаратор переменных - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь отсортировать список объектов на основе пользовательского ввода.Как я могу добиться, чтобы метод sort реализовал компаратор вариантов?

Пример:

List<S3ObjectSummary> objectSummaryList = getObjectSummaries();
objectSummaryList.sort(Comparator.comparing(S3ObjectSummary::getKey);

Как я могу выполнить приведенную выше сортировку на основе требуемых getKey / getModified / других произвольных свойств?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Если все «ключи» будут связаны с методами получения, у вас может быть статическое отображение ключа / получения, которое вы используете в функции:

Примечание: нам придется использовать rawвведите Comparable, так как мы не можем использовать разные Functions<S3ObjectSummary, Comparable<T>> (даже если все получатели вернут Comparable<X> объектов, X будут различаться)

Map<String, Function<S3ObjectSummary, Comparable>> map = new HashMap<>();
map.put("key", s3 -> s3.getKey());
map.put("modified", s3 -> s3.getModified());
// other entries

Затем сортируйте, используя:

objectSummaryList.sort(Comparator.comparing(map.get(compareByKey)));
0 голосов
/ 10 декабря 2018

Это поможет вам:

String sortBy = "key";
list.sort(Comparator.comparing(report -> {
    try {
        return (Comparable) report.getClass().getDeclaredField(sortBy).get(report);
    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException("exception", e);
    }
}));    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...