我想列出一个数组列表并将其存储在小的数组列表中。
我正在执行以下操作,但无法在小数组中输入确切的值。请参阅我的代码并提出其他建议或告诉我我做错了什么
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);
}
}
最佳答案
简短答案
我建议您使用以下任一方法:
Lists.partition(List, int)
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
(请参见下文)。 使用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));
}
}
注意:
附加阅读和其他方法
关于java - Android中的子列表Arraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9533442/