【问题标题】:How do I split Arraylist into several Arraylists?如何将 Arraylist 拆分为多个 Arraylist?
【发布时间】:2021-03-25 05:09:08
【问题描述】:

我正在尝试使用以下规则将 Arraylist 拆分为多个 Arraylist:

  • 当arraylist中索引i的值大于索引i+1的值时,将arraylist拆分为多个子arraylist。

例如,如果有一个arraylist{6,7,8,3,9,10,1,4}, 它应该存储为{ {6,7,8}, {3,9,10}, {1,4} }

我该怎么做?

【问题讨论】:

  • 根据定义,任何索引i 都小于i+1(实际上是少了一个),因此您的描述将更加精确。您是指索引ii+1 处的元素 吗?此外,“它应该存储在另一个数组列表中”建议在“6,7,8,3,9”中,只有 8 个应该放在它自己的列表中,所以再次:你需要编辑你的问题更精确.
  • 一种最简单、最快的方法是:stackoverflow.com/questions/12099721/how-to-use-sublist
  • 据我了解您的要求,每个子列表必须仅包含降序排列的数字。从您的示例输入中,您应该只有两个子列表,如下所示:{8,3}{10, 1}

标签: java arraylist


【解决方案1】:

通过循环原始数组列表并使用子列表方法,下面的代码应该可以解决您的问题。

    ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
    ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(6,7,8,3,9,10,1,4));

    int indexToSplitFrom = 0;
    for(int i = 0; i < numbers.size() - 1; i++){
        System.out.println(numbers.get(i));
        if(numbers.get(i) > numbers.get(i+1)){
            lists.add(new ArrayList<>(numbers.subList(indexToSplitFrom, i + 1)));
            indexToSplitFrom = i + 1;
        }
    }
    lists.add(new ArrayList<>(numbers.subList(indexToSplitFrom,  + numbers.size())));

【讨论】:

    【解决方案2】:

    这段代码应该适合你

            List<Integer> mainList = new ArrayList<>();
            List<List<Integer>> listOfLists = new ArrayList<>();
            int listIndex = 0;
            for (int i = 0; i < mainList.size(); i++) {
                if (i == 0) {
                    listOfLists.add(new ArrayList<>());
                } else if (mainList.get(i) < mainList.get(i - 1)) {
                    listOfLists.add(new ArrayList<>());
                    listIndex++;
                }
                listOfLists.get(listIndex).add(mainList.get(i));
            }
    

    【讨论】:

    • 循环中第一次listOfLists.get (listIndex)抛出异常。
    • 因为没有实例化子列表。我编辑了代码
    【解决方案3】:
    public static void splitList(ArrayList<Integer> input) {
            ArrayList<ArrayList<Integer>> output = new ArrayList<ArrayList<Integer>>();
            System.out.println("Input : "+input);
            for (int count = 0; count < input.size(); count++) {
    
                ArrayList<Integer> subList = new ArrayList<Integer>();
                for (int index = count; index < input.size(); index++) {
                    if((index == input.size() - 1) || (input.get(index) > input.get(index + 1))){
                        subList.add(input.get(index));
                        count = index;
                        break;
                    }else {
                        subList.add(input.get(index));
                    }
                }
                output.add(subList);
            }
            System.out.println("Output : "+output);
        }
    

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 2011-02-23
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多