Java 对特定json元素上JSONObject的arraylist进行排序
我编写了一些代码,使用Gson库创建json数据的数组列表,如下所示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" } 我想知道如何按艺术家元素对数组列表进行排序。目前,它只是按照
{
"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);
}