java - Android中的子列表Arraylist

标签 java arraylist sublist

我想列出一个数组列表并将其存储在小的数组列表中。

我正在执行以下操作,但无法在小数组中输入确切的值。请参阅我的代码并提出其他建议或告诉我我做错了什么

ArrayList<ques_details> queslist = new ArrayList<ques_details>();

ArrayList[] resgrp = new ArrayList[queslist.size() / 2];
Log.v("length", resgrp.length + "");

for (int i = 0; i < resgrp.length ; i++) {
    resgrp[i] = new ArrayList();
    Log.v("initialised ", i + "");
}

for (int i = 0; i <= queslist.size()-1 ; i++) {
    resgrp[i].add(queslist.get(i));
    Log.v("final ", resgrp[i].size() + "");
}

编辑:
public void subListArray(int start, int end) {
        // Log.v("queslist size", queslist.size() + "");
        int m = queslist.size();
        // Log.v("m", m + "");
        ArrayList[] resgrp = new ArrayList[m / 2];
        // Log.v("length", resgrp.length + "");
        int n = resgrp.length;
        // Log.v("n", n + "");
        int o = m / n;
        // Log.v("o", o + "");
        for (int i = 0; i < n; i++) {
            resgrp[i] = new ArrayList<String>();
            Log.v("initialised ", i + "");
        }
        ArrayList<String> TempList = new ArrayList<String>();
        for (int i = start; i <= end - 1; i++) {
            int q = 0 ;
            String temp = queslist.get(i).Ques;
            resgrp[o].add(q, temp);
            // resgrp[i].add(queslist.get(i));
            Log.v("final ", queslist.get(i).Ques + "");
            TempList = resgrp[o];
            q++;
            adapter = new ArrayAdapter(E_Learning_AppActivity.this,
                    R.layout.list_item, R.id.text, TempList);
        }
    }

最佳答案

简短答案

我建议您使用以下任一方法:

  • Google Guava Lists.partition(List, int)
  • 或JDK的 List.subList(int, int)

  • 长答案+示例

    使用Google Guava Lists.partition(List, int)

    它将List划分为指定List大小的int:
    List<Stuff> l = new ArrayList<Stuff>();
    
    // [...] populate l with Stuff here [...]
    
    // partitioning:
    List<List<Stuff>> ll = Lists.partition(l, 5);
    // you now have a list containing sub-lists of at most 5 elements
    

    注意:
  • 它在内部使用 List.subList (请参见下文)。
  • 它返回一个 View ! (您可能想制作副本)。

  • 使用JDK的标准 List.subList(int, int)
    package com.stackoverflow.haylem.sublists;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class SubLists {
    
      public static <T> List<List<T>> partition(List<T> l, final int nPartitions) {
        final List<List<T>> partitions = new ArrayList<List<T>>(nPartitions);
        final int           nElements  = l.size() / nPartitions; // number of elements per full partition
        final int           nRest      = l.size() % nElements;   // size of the last partition (if any)
    
        for (int i = 0; i < nPartitions; i++) { // create our nPartitions partitions
          partitions.add(l.subList(             // one subList per partition
              i * nElements,
              i * nElements + nElements
          ));
        }
        if (nRest > 0) {                        // remainder sublist
          partitions.add(l.subList(
              nPartitions * nElements,
              (nPartitions * nElements) + nRest));
        }
        return (partitions);
      }
    
      /**
       * Generates a dummy list for testing
       */
      public static List<String>      generateStringList(final int size) {
        final List<String> data = new ArrayList<String>(size);
    
        for (int i = 0; i < 129; i++) {
          data.add("String " + i);
        }
        return (data);
      }
    
      /**
       * Prints out all the sublists to visualize partitioning
       */
      public static <T> void          printSubLists(final List<List<T>> sLists) {
        for (int i = 0; i < sLists.size(); i++) { // iterates over all sublists
          System.out.println("partition " + i);
          for (final T element : sLists.get(i)) { // prints out current sublist
            System.out.println(" " + element);    // prints out current element
          }
        }
      }
    
      public static void              test() {
        final List<String> data = generateStringList(129);
    
        // splits l in five partitions and
        // prints out 5 partitions of 25 elements and 1 of 4
        printSubLists(partition(data, 5));
    
        // splits l in partitions of 4 or less elements and
        // prints out 32 partitions of 4 elements and 1 of 1
        printSubLists(partition(data, data.size() / 4));
      }
    
    }
    

    注意:
  • 您需要自己计算大小(Guava可以缓解这种情况)。
  • 保存自己的样板并使用 Guava 。
  • 它返回一个 View ! (您可能想制作副本)。


  • 附加阅读和其他方法
  • VogellaSplitting / Partitioning A Java Collection上的文章
  • Subdividing a Collection into Smaller Collections
  • 关于java - Android中的子列表Arraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9533442/

    相关文章:

    java - 如果等于 mustache 的条件

    java - 如何在 Java 中获取不同单词的数量?

    python - 在Python中,如何计算电子邮件地址列表中 '1'的数量?

    java - 迭代列表的列表

    java - MonitorEnter操作是否耗时?

    java - 非终止 Java 程序

    java - 无法使用 LibGDX Gdx.files.internal 加载 .png 文件

    java - java arraylist调整大小的时间复杂度

    java - 未经检查的 Actor : Required ArrayList<type> found Object

    java - 打印 ArrayList 的子列表(基于用户输入的待办事项列表)会导致空 ArrayList