我编写了一些代码,使用Gson库创建一个json数据的数组列表,看起来像这样。
{
"filename": "somefile.mp3"
"artist": "artist1"
"title": "title1"
"genre": "rock"
}
{
"filename": "anotherfile.mp3"
"artist": "artist2"
"title": "title2"
"genre": "electro"
}
我试图找出如何通过artist元素对此数组列表进行排序。目前它只是按照最初通过文件名创建的方式对其进行排序。阅读stackoverflow建议我应该尝试使用自定义比较器。我一直在看这个答案(How to sort GSON Array based on a key?),但它不适合我。
我有一个名为Tracks.class的自定义类,其中所有的getter和setter都设置了标题,艺术家,流派等等。
TrackFileManager.class是序列化程序,所有JsonObject.addProperty代码都在这里,并将jsonObject返回给MainActivity。
然后将此jsonObject添加到MainActivity中名为values的ArrayList中。 (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());
我拥有的其他代码是MyJSONComparator.class,位于
之下public class MyJSONComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
}
这不产生任何错误,但它没有排序,我知道它不会,但它唯一的方法是它不提示Android Studio中的错误。如果我将代码更改为implements Comparator<Track>
,则Collections.sort
会产生错误。除非我有比较器我不能访问我想要排序的元素,如s1.getArtist
等,除非那不是正确的方法吗?我也尝试了ArrayList<String>
和几乎所有其他类型的组合,除了那个有效的组合。
我显然做错了什么,我很确定我几乎就在那里。 任何人都可以帮助或至少指出我正确的方向吗?
修改
public class MyJSONComparator implements Comparator<Track> {
@Override
public int compare(Track s1, Track s2) {
return s1.artist.compareTo(s2.artist);
}
}
上述代码导致Collections.sort(values,new MyJSONComparator());
错误。
Sort (List<String>, java.util.Comparator<? super java.lang.string> in Collections cannot be applied to ArrayList<String>, com.example.MyJSONComparator.
答案 0 :(得分:0)
您的比较功能应将对象作为输入
@Override
public int compare(Object s1, Object s2) {
return s1.artist.compareTo(s2.artist);
}
Collection.sort将在列表上工作,具有实现相同比较器接口的对象。
参考以下链接 http://www.programcreek.com/2011/12/examples-to-demonstrate-comparable-vs-comparator-in-java/
答案 1 :(得分:0)
晚安睡眠有什么不同。 我不知道为什么我认为我需要在程序中使用Json。我显然不这样做。 在程序中我创建了一个Tracks列表,然后将它们转换为json字符串,然后尝试在其中一个元素上对json进行排序。为什么不在其中一个元素上对track类进行排序。
DERP。
现在它位于Track类中,由Collections.sort(tracks)
触发。轨道的实例是使用setter通过另一种方法构建的,就像我在Gson相关代码中所做的.addproperty一样。
@Override
public int compareTo(Track t) {
return this.artist.compareTo(t.artist);
}