Java 如何根据列表大小将数据存储到另一个ArrayList中?

Java 如何根据列表大小将数据存储到另一个ArrayList中?,java,android,Java,Android,我有下面的循环 for (int i = 0; i < contacts.length(); i++) { JSONObject c = contacts.getJSONObject(i); String id = c.getString("cat_id"); String title = c.getString("cat_name"); String image = c.getString("cat_img"); mDat

我有下面的循环

 for (int i = 0; i < contacts.length(); i++) {
      JSONObject c = contacts.getJSONObject(i);

      String id = c.getString("cat_id");
      String title = c.getString("cat_name");
      String image = c.getString("cat_img");

      mData.add(id);
      mData.add(title);
      mData.add(image);
      categoryHashMap.put(title, mData);
      mData.clear();
 }
 showLog("index: "+ categoryHashMap.size());

 if (jsonDataListener != null) {
       //   jsonDataListener.onClickData(tempList);
 }
mData是ArrayList。现在,长度是7。但在完成for循环后,mData大小显示为21。这是正确的,因为显然有3个字段,即id、标题和图像。但我想要的是,我想将数据存储到另一个arraylist中,但新的arraylist大小应该是7,通过对每个索引/sie进行扩展,应该有3个字段。所以,我想是这样的:

 private List<String> mData;
 private  List<List<String>> tempList;
但问题是大小显示为0

我还尝试了hashmap私有映射categoryHashMap=newHashMap;,第一个参数是string,第二个是list,但它不是make

输出应为: 在新arraylist中

索引0->id1 标题1 图1

索引1->id2 标题2 图2

编辑: 完整代码:

 private List<String> mData;
    private  List<List<String>> tempList;
    private  Map<String, List<String>> categoryHashMap = new HashMap<>();



private void getTextFromJSON(String jsonParsingString) {
        if (jsonParsingString != null) {
            try {
                JSONObject jsonObj = new JSONObject(jsonParsingString);

                // Getting JSON Array node
                JSONArray contacts = jsonObj.getJSONArray("data");

                // looping through All data
                mData.clear();
                for (int i = 0; i < contacts.length(); i++) {
                    JSONObject c = contacts.getJSONObject(i);

                    String id = c.getString("cat_id");
                    String title = c.getString("cat_name");
                    String image = c.getString("cat_img");

                    mData.add(id);
                    mData.add(title);
                    mData.add(image);

                   /*for (int j=i; j<i+3; j++ ) {
                       categoryHashMap.put(title, mData);
                   }*/
                    tempList.add(mData);

                }
                showLog("index: "+ tempList);

                    if (jsonDataListener != null) {
                     //   jsonDataListener.onClickData(tempList);
                    }

            } catch (final JSONException e) {
                Log.e(TAG, "Json parsing error: " + e.getMessage());
                mActivity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(mContext.getApplicationContext(),
                                "Json parsing error: " + e.getMessage(),
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });

                if (jsonDataListener != null) {
                    jsonDataListener.onJSONParsingError(e.getMessage());
                }

            }
        } else {
            Log.e(TAG, "Couldn't get JSON from server.");
            mActivity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(mContext.getApplicationContext(),
                            "Couldn't get json from server. Check LogCat for possible errors!",
                            Toast.LENGTH_LONG)
                            .show();
                }
            });
            if (jsonDataListener != null) {
                jsonDataListener.onJSONParsingError("Couldn't get json from server. Check LogCat for possible errors!");
            }


        }
    }

创建一个单独的类来保存3个字段。例如,将其命名为

class TempData{

  private String id;
  private String title;
  private String image;


 //getters and setters

 }
然后将您的id、标题和图像分配给该类

  TempData tempData = new TempData();
  //set your id,title,image using setters
把你的清单列在下面

  private List<TempData> mData;

因为您要单独添加字符串作为列表项

                mData.add(id);
                mData.add(title);
                mData.add(image);
您的列表类型是stringlistmdata,它应该是这样的自定义类

  List<Cat_Model> mData
使用以下代码:

    private  List<List<String>> tempList; // your array list
    for (int i = 0; i < contacts.length(); i++) {
        JSONObject c = contacts.getJSONObject(i);

        String id = c.getString("cat_id");
        String title = c.getString("cat_name");
        String image = c.getString("cat_img");
        List<String> mData = new ArrayList<>();

        mData.add(id);
        mData.add(title);
        mData.add(image);
        // Add your mData into your tempList
        tempList.add(mData);
        //categoryHashMap.put(title, mData);
    }
更新:
从你的完整代码移动私有列表圣殿骑士;在函数中,将列表数据移动到循环中,如上图所示。

尝试下面的实现

List<String> mData;
List<List<String>> tempList = new ArrayList<>();

for (int i = 0; i < contacts.length(); i++) {
    mData = new ArrayList<>();

    JSONObject c = contacts.getJSONObject(i);

    String id = c.getString("cat_id");
    String title = c.getString("cat_name");
    String image = c.getString("cat_img");

    mData.add(id);
    mData.add(title);
    mData.add(image);

    tempList.add(mData);
}
现在圣堂武士的尺寸是7,每个圣堂武士有3件物品


我已经有了模型类,但问题是我想将新的arraylist传递到adapterclass参数化构造函数中,这样我就可以通过上述方法将图像和标题设置到recyclerview Adapter中。您需要清除每个循环的mData。。因此,添加mData.clear;在你的循环中,这是有效的,但现在由于这个原因,我得到了编译器错误。现在我需要将String类型转换为Category类型,这是我的模型类。我该怎么做?我不再问别的问题了,因为你已经知道我的问题了。请帮帮我。上面提到的分类模型在哪里。。请直接说明您的问题。临时列表大小为7,但当我检查每个索引时,它显示21个大小和您的屏幕截图。你肯定错过了一些循环初始化mData的内幕信息。添加此mData=newarraylist;或者用我的for循环替换你的for循环也会解决这个问题,但是我也想在for循环之外传递mData!请指定将mData传递到外部循环的原因。我找不到任何意义。你能澄清你的要求吗?@PriyankaSingh。将列表声明移到函数中。这是可行的,但现在由于这个原因,我得到了编译器错误。现在我需要将String类型转换为Category类型,这是我的模型类。我该怎么做?我不再问别的问题了,因为你已经知道我的问题了。请帮助我。@PriyankaSingh类别类型必须是一些常量的静态列表,创建一个从字符串返回类别类型的函数,您可以为您的类别类型创建枚举或其他方式。如果仍然存在问题,请在将您的列表转换为pojo类的代码部分问另一个问题。您能帮忙吗:您能帮忙吗?这是可行的,但现在由于这个原因,我得到了编译器错误。现在我需要将String类型转换为Category类型,这是我的模型类。我该怎么做?我不再问别的问题了,因为你已经知道我的问题了。请帮帮我,你能帮帮我吗?
    private  List<List<String>> tempList; // your array list
    for (int i = 0; i < contacts.length(); i++) {
        JSONObject c = contacts.getJSONObject(i);

        String id = c.getString("cat_id");
        String title = c.getString("cat_name");
        String image = c.getString("cat_img");
        List<String> mData = new ArrayList<>();

        mData.add(id);
        mData.add(title);
        mData.add(image);
        // Add your mData into your tempList
        tempList.add(mData);
        //categoryHashMap.put(title, mData);
    }
List<String> mData;
List<List<String>> tempList = new ArrayList<>();

for (int i = 0; i < contacts.length(); i++) {
    mData = new ArrayList<>();

    JSONObject c = contacts.getJSONObject(i);

    String id = c.getString("cat_id");
    String title = c.getString("cat_name");
    String image = c.getString("cat_img");

    mData.add(id);
    mData.add(title);
    mData.add(image);

    tempList.add(mData);
}