首页 > 解决方案 > 对来自 JSON 的数据进行分组并显示在列表中

问题描述

我有一个这样的 JSON 数据:

{
  "items": [
    {
      "kodeHp": "C-1",
      "firstName": "iman",
      "lastName": "firmansyah",
      "email": "ggag@gmail.com"
    },
    {
      "kodeHp": "C-2",
      "firstName": "dini",
      "lastName": "yyyy",
      "email": "ggag@gmail.com"
    },
    {
      "kodeHp": "C-1",
      "firstName": "tanu",
      "lastName": "xxxxx",
      "email": "bb@gmail.com"
    },

我想在列表上显示“firstName”,但按“kodeHp”对象排序。所以我的清单看起来像这样:

{
iman: C1
tanu: C1
dini: C2
}

这是我尝试过的:

private String parseItems(String jsonResponse) {
        ArrayList<HashMap<String,String>> list = new ArrayList<>();

        try {
            JSONObject jObj = new JSONObject(jsonResponse);
            JSONArray jArray = jObj.getJSONArray("items"); //edited on gscript

            for(int i = 0; i < jArray.length(); i++){
                JSONObject jo = jArray.getJSONObject(i);
                String kodeHp = jo.getString("kodeHp");
                String firstName = jo.getString("firstName");
                String lastName = jo.getString("lastName");
                String email = jo.getString("email");

                HashMap<String, String> item = new HashMap<>();
                if (!item.containsKey(kodeHp)){
                    item.get(kodeHp);
                }
                item.put("firstName", firstName);
                item.put("lastName", lastName);
                item.put("email",email);
                item.put("kodeHp", kodeHp);
                list.add(item);

            }
        } catch (JSONException e){

        }
        adapter = new SimpleAdapter(this, list, R.layout.item_list_row,
                new String[]{"firstName", "kodeHp"}, new int[] {R.id.TvFirstName,R.id.TvKodeHp});

        listView.setAdapter(adapter);
        loading.dismiss();
        return jsonResponse;
    }

它可以显示我的 JSON 数据,但还没有像我想要的那样排序。有什么建议吗?

标签: javajsongrouping

解决方案


要对列表进行排序,您可以使用List.sort适当Comparator的 ,例如使用Comparator.comparing

list.sort(Comparator.comparing(map -> map.get("kodeHp")));

请注意,这将按 的值按字母顺序排序"kodeHp"。另请注意,null如果输入数据中可能存在值,则必须添加对值的处理。


如果您需要 Java8 之前的解决方案,例如对于旧的 Android 版本,您将不得不创建一个老式的匿名类,例如:

list.sort(new Comparator<Map<String,String>>() {
    @Override
    public int compare(Map<String,String> o1, Map<String,String> o2) {
        return o1.get("kodeHp").compareTo(o2.get("kodeHp"));
    }
});

推荐阅读