[英]How can I split an ArrayList into several lists?
請參閱以下ArrayList:
List<Integer> values = new ArrayList<Integer>();
values.add(0);
values.add(1);
values.add(2);
values.add(3);
values.add(4);
values.add(5);
values.add(6);
所以我們有:
integerList.size(); // outputs 7 elements
我需要按如下方式顯示Google圖表 :
為了生成它的值,我只是打電話
StringUtils.join(values, ","); // outputs 0,1,2,3,4,5,6
它發生它支持高達 1000像素的寬度。 因此,如果我有很多值,我需要將ArrayList拆分為其他ArrayLists以生成其他圖表。 就像是:
Integer targetSize = 3; // And suppose each target ArrayList has size equal to 3
// ANSWER GOES HERE
List<List<Integer>> output = SomeHelper.split(values, targetSize);
我應該用什么助手來實現我的目標?
google-collections有Lists.partition() 。 您提供每個子列表的大小。
首先,您可能會發現List#subList()
很有用。 這是一個基本的例子:
public static void main(String... args) {
List<Integer> list = new ArrayList<Integer>();
list.add(0);
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
int targetSize = 3;
List<List<Integer>> lists = split(list, targetSize);
System.out.println(lists); // [[0, 1, 2], [3, 4, 5], [6]]
}
public static <T extends Object> List<List<T>> split(List<T> list, int targetSize) {
List<List<T>> lists = new ArrayList<List<T>>();
for (int i = 0; i < list.size(); i += targetSize) {
lists.add(list.subList(i, Math.min(i + targetSize, list.size())));
}
return lists;
}
請注意,我沒有使用splittedInto
,因為它不具有太大的意義結合targetSize
。
Apache Commons Collections 4在ListUtils
類中有一個分區方法。 以下是它的工作原理:
import org.apache.commons.collections4.ListUtils;
...
int targetSize = 3;
List<Integer> values = ...
List<List<Integer>> output = ListUtils.partition(values, targetSize);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.