java - 对特定 json 元素上的 jsonobjects 数组列表进行排序

标签 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"
}

我试图弄清楚如何按艺术家元素对这个数组列表进行排序。目前,它只是按照最初通过文件名创建的方式对其进行排序。在 stackoverflow 上阅读表明我应该尝试使用自定义比较器。我一直在看这个答案( How to sort GSON Array based on a key? ),但它对我不起作用。

我有一个名为 Tracks.class 的自定义类,其中设置了所有 getter 和 setter 来保存标题、艺术家、流派等

TrackFileManager.class 是序列化器,所有 JsonObject.addProperty 代码都在其中,并将 jsonObject 返回到 MainActivity。

然后,这个 jsonObject 将被添加到 MainActivity 中名为 value 的 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.

最佳答案

您的比较函数应将对象作为输入

@Override
public int compare(Object s1, Object s2) {
    return s1.artist.compareTo(s2.artist);
}

Collection.sort 将在列表上工作,具有实现相同比较器接口(interface)的对象。

请引用以下链接 http://www.programcreek.com/2011/12/examples-to-demonstrate-comparable-vs-comparator-in-java/

关于java - 对特定 json 元素上的 jsonobjects 数组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26439821/

相关文章:

Java复式表

java - 用 Java 读取文本文件最快的方法是什么?

java - 如何维护 Java/J2EE Web 应用程序的缓存?

java - 适用于 Android 的 Microsoft Translate API 出现 UnknownHostException

php - Wordpress:查询 mySQL 或使用 WP_query

android - 如何在android中加密和解密我的应用程序数据库

json - 如何根据 JSON 字符串值设置图标?

javascript - jqGrid 树网格 - 未显示?

php - jQuery UI 自动完成 - 西类牙字符在本地正确显示但在服务器上不正确

java - 我创建的类可以自动装箱吗?