Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Gson按值排序树映射的数组列表_Java_Sorting_Gson - Fatal编程技术网

Java Gson按值排序树映射的数组列表

Java Gson按值排序树映射的数组列表,java,sorting,gson,Java,Sorting,Gson,我从Gson库中获得了Java中LinkedTreeMap对象的ArrayList。每个对象上都有一个键,假设该键标记为“code”,每个值都是一个字符串。我想按照特定的键(“代码”键)按升序对这些LinkedTreeMap对象的整个ArrayList进行排序(但也很好奇,人们如何能以相反的顺序进行排序)。我知道您必须实现Comparable接口才能使其正常工作,但我不知道如何进行。在您的示例中,实现Comparable接口可能会有太多开销(您必须为您的LinkedTreeMap引入一个专用类,

我从Gson库中获得了Java中LinkedTreeMap对象的ArrayList。每个对象上都有一个键,假设该键标记为“code”,每个值都是一个字符串。我想按照特定的键(“代码”键)按升序对这些LinkedTreeMap对象的整个ArrayList进行排序(但也很好奇,人们如何能以相反的顺序进行排序)。我知道您必须实现
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")); 
  }
} 
但是,如果您添加错误处理,并且您不能免费获得反向排序,那么这将变得很麻烦