递归函数 - 保存ArrayList Java

时间:2014-07-07 17:26:00

标签: java recursion arraylist

我有一个递归函数,但我想在ArrayList中添加(并保存)以前的数据。

我目前正在这样做,但它没有保存:

  private ArrayList<String> checkNextPage(String urlGoogleToken){

    ArrayList<String> listTokenFunction = new ArrayList<String>();

    try
    {
        /* I AM DOING SOME STUFF */

        if (jsonObj.has("next_page_token")){
            String next_page_token = (String) jsonObj.get("next_page_token");
            listTokenFunction.add(next_page_token); // I WANT TO SAVE THIS LIST
            String result = urlGoogleToken.split("&pagetoken=")[0];
            String urlGoogleMaps2 = result+"&pagetoken="+next_page_token; 
            checkNextPage(urlGoogleMaps2); // CALL THE FUNCTION
        } else {
            System.out.println("ELSE");
        }
    } catch (Exception e) {
            e.printStackTrace();
       }

    return listTokenFunction;
}

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

在您的代码中,每次递归调用该方法都会创建自己的ArrayList作为局部变量。解决此问题的一种方法是更改​​方法,以便将(最初为空)ArrayList作为输入并填充它。每个递归调用都将列表作为输入并添加到其中。

private void checkNextPage(ArrayList<String> listTokenFunction, String urlGoogleToken){

   // initialize if null
   if(listTokenFunction == null) {
       listTokenFunction = new ArrayList<String>();
   }

   try
   {
       /* I AM DOING SOME STUFF */

       if (jsonObj.has("next_page_token")){
          String next_page_token = (String) jsonObj.get("next_page_token");
          listTokenFunction.add(next_page_token); // I WANT TO SAVE THIS LIST
          String result = urlGoogleToken.split("&pagetoken=")[0];
          String urlGoogleMaps2 = result+"&pagetoken="+next_page_token; 
          checkNextPage(urlGoogleMaps2, listTokenFunction); // CALL THE FUNCTION
       } else {
          System.out.println("ELSE");
       }
   } catch (Exception e) {
          e.printStackTrace();
   }

}

该方法可以有void返回类型,因为列表将在内部填充,无需返回。

答案 1 :(得分:2)

您在方法中创建一个新的ArrayList。 ArrayList<String> listTokenFunction = new ArrayList<String>();,因此“旧”列表会丢失,当您添加条目时,它将始终是第一个。尝试将方法之外的Arraylist初始化为类变量。