【问题标题】:ArrayList group itemsArrayList 组项目
【发布时间】:2014-11-11 15:13:33
【问题描述】:

我有一个简单的 json 文件

{"name":"item1",
 "category":"work",
 "id":1},
{"name":"item2",
 "category":"work",
 "id":2},
{"name":"item3",
 "category":"work",
 "id":3}
{"name":"item4",
 "category":"home",
 "id":4}

转换为 ArrayList 我想按类别对项目进行分组,如下面的树视图

工作 -项目1 -项目2 -item3

首页 -item4

有什么想法吗?

    private List<Item> item = new ArrayList<Item>();

    try {

    JSONObject responseObject = new JSONObject(response);
    JSONObject itemsObject = responseObject.getJSONObject("items");

    Iterator<?> keysIterator = itemsObject.keys();

    while(keysIterator.hasNext()) {
         String keyString = (String)keysIterator.next();
         JSONObject coupon = couponsObject.getJSONObject(keyString);

         Item item = new Item();
         item.setName(item.getString("name"));
         item.setCategory(item.getString("category"));
         item.setID(item.getString("id"));
         itemList.add(item);
     }

   } catch (Exception e) {
     e.printStackTrace();
   }

   adapter.notifyDataSetChanged();

【问题讨论】:

  • 看起来你正在寻找Map&lt;String, List&lt;Item&gt;&gt;
  • 如何将该 json 文件转换为 arraylist 是否有一个类来保存每个项目的数据?
  • 检查上面我编辑了我的原始帖子
  • 您可以简单地在category 上对数组列表进行排序,因此home 项将出现在列表顶部,然后是work

标签: java android json arraylist


【解决方案1】:

正如@Luiggi 建议的那样,使用Map 映射将反映您的树视图结构。

您需要做的只是稍微更改您的代码,而不是 Listdefine map

Map> items = new HashMap();

其他更改在您创建项目的while loop

     Item item = new Item();
     item.setName(item.getString("name"));
     item.setCategory(item.getString("category"));
     item.setID(item.getString("id"));

     List<Item> itemList= items.get(item.getCategotry());
     if (itemList ==null){
     itemList = new ArrayList<>();
         items.put(item.getCategotry(),itemList);
     }
     itemList.add(item);

【讨论】:

    【解决方案2】:

    有点合乎逻辑。如果进入的对象的类别和数量是动态的,请尝试使用递归

    public void itemSort(String response)
    {
       map = new HashMap<>();
       JSONObject obj = new JSONObject("{\"list\":[" + messageJson + "]}");
       JSONArray arrrr = obj.getJSONArray("list");
    
       getItems (arrrr, 0);
       System.out.println(map + "");
    }
    
    private HashMap<String, String> map;
        private void getItems (JSONArray ar, int counter)
        {
            if (counter < ar.length())
            {
                JSONObject j = (JSONObject) ar.get(counter);
                if (!map.containsKey(j.get("category").toString()))
                {
                    map.put(j.get("category").toString(), j.get("name").toString());
                } else
                {
                    map.put(j.get("category").toString(), map.get(j.get("category").toString()) 
                            + "," + j.get("name").toString());
                }
                counter++;
                getItems (ar, counter);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 2017-07-01
      • 2016-06-14
      相关资源
      最近更新 更多