Java Gson按值排序树映射的数组列表
我从Gson库中获得了Java中LinkedTreeMap对象的ArrayList。每个对象上都有一个键,假设该键标记为“code”,每个值都是一个字符串。我想按照特定的键(“代码”键)按升序对这些LinkedTreeMap对象的整个ArrayList进行排序(但也很好奇,人们如何能以相反的顺序进行排序)。我知道您必须实现Java Gson按值排序树映射的数组列表,java,sorting,gson,Java,Sorting,Gson,我从Gson库中获得了Java中LinkedTreeMap对象的ArrayList。每个对象上都有一个键,假设该键标记为“code”,每个值都是一个字符串。我想按照特定的键(“代码”键)按升序对这些LinkedTreeMap对象的整个ArrayList进行排序(但也很好奇,人们如何能以相反的顺序进行排序)。我知道您必须实现Comparable接口才能使其正常工作,但我不知道如何进行。在您的示例中,实现Comparable接口可能会有太多开销(您必须为您的LinkedTreeMap引入一个专用类,
Comparable
接口才能使其正常工作,但我不知道如何进行。在您的示例中,实现Comparable
接口可能会有太多开销(您必须为您的LinkedTreeMap
引入一个专用类,该类实现Compariable
)另外,如果您的类具有一个自然顺序,则该类通常用于对该类的元素进行排序,则实现才有意义
实现比较器
更灵活,也更容易实现。然后可以使用此类对列表进行排序:
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"));
}
}
但是,如果您添加错误处理,这将变得很麻烦。而且您不能免费获得反向排序。在您的示例中,实现
Comparable
接口的开销可能太大(您必须为实现Comparable
的LinkedTreeMap
引入一个专用类)另外,实现只有在类具有自然顺序的情况下才有意义,这种顺序通常用于对此类的元素进行排序
实现比较器
更灵活,也更容易实现。然后可以使用此类对列表进行排序:
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"));
}
}
但是,如果您添加错误处理,并且您不能免费获得反向排序,那么这将变得很麻烦