Gson按值排序TreeMap的ArrayList
Gson sort ArrayList of TreeMap by value
我在 Gson 库的 Java 中有一个 LinkedTreeMap 对象的 ArrayList。每个对象上都有一个键,假设键被标记为 "code" 并且每个值都是一个字符串。我想按特定键("code" 键)按升序对这些 LinkedTreeMap 对象的整体 ArrayList 进行排序(但也很好奇如何以相反的顺序进行排序)。我知道你必须实现 Comparable
接口才能让它工作,我只是不确定如何去做。
在您的示例中实现 Comparable
接口可能开销太大(您必须为实现 Comparable
的 LinkedTreeMap
引入一个专用的 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")));
但是如果添加错误处理,这会变得很麻烦。而且您不会免费获得反向排序。
我在 Gson 库的 Java 中有一个 LinkedTreeMap 对象的 ArrayList。每个对象上都有一个键,假设键被标记为 "code" 并且每个值都是一个字符串。我想按特定键("code" 键)按升序对这些 LinkedTreeMap 对象的整体 ArrayList 进行排序(但也很好奇如何以相反的顺序进行排序)。我知道你必须实现 Comparable
接口才能让它工作,我只是不确定如何去做。
在您的示例中实现 Comparable
接口可能开销太大(您必须为实现 Comparable
的 LinkedTreeMap
引入一个专用的 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")));
但是如果添加错误处理,这会变得很麻烦。而且您不会免费获得反向排序。