Arraylist的ArrayList中的字符串数组

这个问题在这里已经有了答案:

  • 从数组32中创建ArrayList答案

  • public static void main(String[] args) {
        String[] sentences = {"hello", "how are you", "i am fine", "and you ?", "thank you"};
        System.out.println(split(2,sentences));
        System.out.println(split(3,sentences));
    }
    
    public static List<List<String>> split(int numberOfElements, String[] sentences) {
        List<List<String>> lists = new ArrayList<List<String>>();
        int index = 0;
        for (String sentence : sentences) {
            if (index % numberOfElements == 0) {
                lists.add(new ArrayList<String>());
            }
            lists.get(index / numberOfElements).add(sentences[index]);
            index++;
        }
        return lists;
    }
    

    输出:

    [[hello, how are you], [i am fine, and you ?], [thank you]]
    [[hello, how are you, i am fine], [and you ?, thank you]]
    

    public static void main(String[] args) {
       String[] sentences = { "hello", "how are you", "i am fine", "and you ?", "thank you" };
    
       List<List<String>> convertIntoList = convertIntoList(sentences, 2);
       System.out.println(convertIntoList);
    
       convertIntoList = convertIntoList(sentences, 3);
       System.out.println(convertIntoList);
    }
    
    
    private static List<List<String>> convertIntoList(String[] sentences, int nbElement) {
       List<List<String>> listOfListTarget = new ArrayList<List<String>>();
       int currentIndex = 0;
    
       while (currentIndex < sentences.length) {
    
        int nextIndex = currentIndex + nbElement;
        if (nextIndex > sentences.length) {
          nextIndex = sentences.length;
        }
        final String[] copyOfRange = Arrays.copyOfRange(sentences, currentIndex, nextIndex);
        List<String> subList = new ArrayList<String>();
        subList.addAll(Arrays.asList(copyOfRange));
        listOfListTarget.add(subList);
        currentIndex+=nbElement;
      }
      return listOfListTarget;
    }
    

    这是作业吗?

    所以你有一个字符串数组,并且你想创建一个List>,每个内部List至多包含x个元素。

    要获得x个元素并将它们放入列表中,您可以执行一个简单的for循环。

    String[] myStringArray = { ... };
    List<String> myListOfString = new ArrayList<>();
    for(int i=0; i<x; i++) {
        myListOfString.add(myStringArray[i]);
    }
    

    例如,如果你有这些值

    String[] myStringArray = {"a", "b", "c", "d", "e"};
    x = 2;
    

    您将使用上述循环获得以下列表:

    ["a", "b"]
    

    大! 但是我们需要获取myStringArray所有内容! 我们如何做到这一点? 然后让我们做第一步,我们遍历数组的所有内容。 我们可以这样做。

    int i=0; 
    while(i < myStringArray.length) {
        System.out.println(myStringArray[i]);
        i++;
    }
    

    哪个会输出:

    a
    b
    c
    d
    e
    

    这不能解决问题......但至少我们知道如何迭代整个事情。 下一步是获得它们的x。 听起来很简单吧? 所以基本上我们需要从内容中创建一个x列表。 也许我们可以用我们创建的几个例子的逻辑来解决问题。

    // Create list of list of string here
    int i = 0;
    while(i < myStringArray.length) {
      // Create list of string here
      for(int j=0; j<x; j++) {
          // Add myStringArray[j] to list of string here
      }
      // Add the list of string to the list of list of string here
      i++;
    }
    

    容易吗? 不,这给出了以下列表:

    ["a", "b"]
    ["a", "b"]
    ["a", "b"]
    ["a", "b"]
    ["a", "b"]
    

    为什么? 在第一个循环中,我们迭代了数组中的数量。 在第二个循环中,我们将元素0和1添加到列表中。 显然这是行不通的。 第二个循环需要意识到它不应该添加以前添加的元素,同时第一个循环需要知道第二个循环正在做什么。 所以你可能会想,也许我们可以使用int i来指示第二个循环应该开始的位置?

    int i = 0;
    while(i<myStringArray.length) {
        while(i<x) {
            // add myStringArray[i];
            i++;
        }
        i++;
    }
    

    不幸的是,使用与以前相同的值,这只会给出以下列表

    ["a", "b"]
    

    因为i遍历整个数组。 所以当它从0到长度时,无论我在第二个数组上使用什么值。 当它再次循环时, i变成1,所以第二个循环的开始是1。

    我们需要一个单独的变量来进行计数,同时还要记住我们目前在第二个循环中的位置。

    int i = 0;
    while(i<myStringArray.length) {
        int count = 0;
        while(count < x) {
            // Add myStringArray[count+i] to list of string
            count++;
        }
        // Add to list of list of string
        i += count + 1; // Need to be aware of how much we have processed
    }
    

    这将做我们想要的,但不幸的是,我们可能在某些价值上遇到麻烦。 假设x是10, myStringArray的长度只有2,这将抛出一个异常,因为当它到达count + i = 3的点时,该索引不再存在。 第二个循环也需要知道还有多少。

    最后我们会得到下面的代码

    int i = 0;
    while(i<myStringArray.length) {
        int count = 0;
        while(count < x && count+i < myStringArray.length) {
            // Add myStringArray[count+i] to list of string
        }
        // Add to list of list of string
        i += count; // Need to be aware of how much we have processed
    }
    

    哪个会给

    ["a", "b"]
    ["c", "d"]
    ["e"]
    

    编辑:下次试着把一些代码,你试过一些东西。

    链接地址: http://www.djcxy.com/p/17647.html

    上一篇: Array of Strings into an ArrayList of Arraylist

    下一篇: Converting an array into Array List