Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.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 对特定json元素上JSONObject的arraylist进行排序_Java_Android_Json_Arraylist_Gson - Fatal编程技术网

Java 对特定json元素上JSONObject的arraylist进行排序

Java 对特定json元素上JSONObject的arraylist进行排序,java,android,json,arraylist,gson,Java,Android,Json,Arraylist,Gson,我编写了一些代码,使用Gson库创建json数据的数组列表,如下所示 { "filename": "somefile.mp3" "artist": "artist1" "title": "title1" "genre": "rock" } { "filename": "anotherfile.mp3" "artist": "artist2" "title": "title2" "genre": "electro" } 我想知道如何按艺术家元素对数组列表进行排序。目前,它只是按照

我编写了一些代码,使用Gson库创建json数据的数组列表,如下所示

{
 "filename": "somefile.mp3"
 "artist": "artist1"
 "title": "title1"
 "genre": "rock"
}
{
 "filename": "anotherfile.mp3"
 "artist": "artist2"
 "title": "title2"
 "genre": "electro"
}
我想知道如何按艺术家元素对数组列表进行排序。目前,它只是按照最初通过文件名创建的方式对其进行排序。阅读stackoverflow表明我应该尝试使用自定义比较器。我一直在看这个答案,但它对我不起作用

我有一个名为Tracks.class的自定义类,它设置了所有的getter和setter,包含标题、艺术家、流派等

TrackFileManager.class是序列化程序,其中包含所有JsonObject.addProperty代码,并将JsonObject返回给MainActivity

然后将此jsonObject添加到名为values的ArrayList中,如下所示,在MainActivity中。 listOfFiles是另一个数组列表,它保存我的MP3的所有文件名

final GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Track.class, new TrackFileManager());
gsonBuilder.setPrettyPrinting();
//diasableHtmlEscaping stops & turning into \u0026
final Gson gson = gsonBuilder.disableHtmlEscaping().create();

values = new ArrayList<String>();

for (String file : listOfFiles){
    t = new Track(path,file);
    values.add(gson.toJson(t));
}
Collections.sort(values, new MyJSONComparator());
上面的代码导致Collections.sortvalues,新的MyJSONComparator;出错


排序列表,java.util.Comparator您的比较函数应该将对象作为输入

@Override
public int compare(Object s1, Object s2) {
    return s1.artist.compareTo(s2.artist);
}
Collection.sort将在列表上工作,使对象实现相同的comparator接口

请参阅下面的链接

睡个好觉会有多大的不同。 我不知道为什么我认为我需要在程序中使用Json。我显然没有。 在程序中,我创建一个曲目列表,然后将它们转换为json字符串,然后尝试对其中一个元素上的json进行排序。为什么不直接对tracks类的一个元素进行排序呢

德普

这现在位于Track类中,由Collections.sorttracks触发。track的实例是通过另一个使用setter的方法构建的,就像我在Gson相关代码中所做的.addproperty一样

@Override
public int compareTo(Track t) {
    return this.artist.compareTo(t.artist);
}

以下对象的pojo类是哪个??{文件名:somefile.mp3艺术家:艺术家1标题:标题1流派:摇滚}TrackFileManager。。。。如果是,那么这应该在您的列表中,这是应该实现ComparatorIts的类,它是基于Tracks类的Gson创建的JSONObject的arraylist。所以POJO是一条铁轨。TrackFileManager是创建json的序列化程序。
@Override
public int compare(Object s1, Object s2) {
    return s1.artist.compareTo(s2.artist);
}
@Override
public int compareTo(Track t) {
    return this.artist.compareTo(t.artist);
}