Gson按值排序TreeMap的ArrayList

Gson sort ArrayList of TreeMap by value

我在 Gson 库的 Java 中有一个 LinkedTreeMap 对象的 ArrayList。每个对象上都有一个键,假设键被标记为 "code" 并且每个值都是一个字符串。我想按特定键("code" 键)按升序对这些 LinkedTreeMap 对象的整体 ArrayList 进行排序(但也很好奇如何以相反的顺序进行排序)。我知道你必须实现 Comparable 接口才能让它工作,我只是不确定如何去做。

在您的示例中实现 Comparable 接口可能开销太大(您必须为实现 ComparableLinkedTreeMap 引入一个专用的 class)如果您的 class 具有自然顺序,那么实施仅有意义,该顺序始终用于对此 class.

的元素进行排序

实施 Comparator 更灵活,也更容易做到。这个 class 然后可以用来对你的列表进行排序:

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(),您可以简单地颠倒比较器的顺序。

您也可以使用 lambda 而不是完全成熟的 Comparator class:

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

但是如果添加错误处理,这会变得很麻烦。而且您不会免费获得反向排序。