Реализация интерфейса 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")));
Но это становится громоздким, если вы добавите обработку ошибок. И вы не получите обратный вид бесплатно.