Gson сортирует ArrayList TreeMap по значению - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть ArrayList объектов LinkedTreeMap в Java из библиотеки Gson. У каждого объекта есть ключ, скажем, ключ помечен как «код», а каждое значение является строкой. Я хочу отсортировать общий ArrayList этих объектов LinkedTreeMap по этому конкретному ключу (ключу «кода») в порядке возрастания (но также любопытно, как это можно сделать в обратном порядке). Я понимаю, что вам нужно было бы реализовать интерфейс Comparable, чтобы заставить это работать, я просто не уверен, как go сделать это.

1 Ответ

2 голосов
/ 02 апреля 2020

Реализация интерфейса Comparable может оказаться слишком сложной в вашем примере (вам нужно будет ввести выделенный класс для LinkedTreeMap, который реализует Comparable), дополнительная реализация имеет смысл, только если ваш класс имеет естественный порядок , который всегда используется для сортировки элементов этого класса.

Реализация Comparator гораздо более гибкая и довольно простая в выполнении. Затем этот класс можно использовать для сортировки списка:

public static void main(String[] args) {
  List<Map<String, String>> list = new ArrayList<>(); // get your list from somewhere
  list.sort(new MapByCodeComparator());
}

private static class MapByCodeComparator implements Comparator<Map<String, String>> {
  @Override
  public int compare(Map<String, String> o1, Map<String, String> o2) {
    // probably do some error handling here to handle cases where "code" is not present in the map
    return o1.get("code").compareTo(o2.get("code")); 
  }
} 

Используя new MapComparator().reversed(), вы можете просто изменить порядок вашего компаратора.

Вы также можете использовать лямбду вместо Полноценный Comparator класс:

list.sort((o1, o2) -> o1.get("code").compareTo(o2.get("code")));

Но это становится громоздким, если вы добавите обработку ошибок. И вы не получите обратный вид бесплатно.

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