我试图将ArrayList拆分为单独的块。我有一个函数返回在jsoupie中收集的表数据,就像单个元素一样。 我想知道如何制作第二个列表,以便它由第一个列表中的每5个后续元素组成。
example:
1 list:
lista1.get (0) = Monday;
lista1.get (1) = Tuesday;
...
lista1.get (6) = Sunday;
and here I would like to make it
//lista1.get(1) .. lista1.get(6)
lista2.get (0) = Monday, Tuesday, Wednesday, Thursday, Friday;
lista2.get (1) = any, other data contained in, this, leaves, stated below;
由于
答案 0 :(得分:1)
尝试这样的事情:
public static void main(String[] args) {
List<String> flatList = Arrays.asList(
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11");
List<List<String>> outer = new ArrayList<List<String>>();
int cnt = 0;
List<String> inner = new ArrayList<String>(5);
for (String str : flatList) {
inner.add(str); // fill inner list
if (++cnt == 5) {
outer.add(inner);
inner = new ArrayList<String>(5);
cnt = 0;
}
}
if (!inner.isEmpty()) {
outer.add(inner);
}
System.out.println(outer);
}
此代码的结果是:
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11]]
答案 1 :(得分:1)
我为你写了两种方法。一个将列表拆分为列表列表,另一个将嵌套列表分组为单个字符串。
public class LinkedListSplitByFive {
private static List<List<String>> splitByGroupAsList(List<String> list, int elementsInGroup) {
List<List<String>> result = new ArrayList<List<String>>();
List<String> group = new ArrayList<String>(elementsInGroup);
for (String s : list) {
group.add(s);
if (group.size() == elementsInGroup) {
result.add(group);
group = new ArrayList<String>(elementsInGroup);
}
}
if (!group.isEmpty()) {
result.add(group);
}
return result;
}
private static List<String> splitByGroupAsString(List<String> list, int elementsInGroup) {
List<List<String>> lists = splitByGroupAsList(list, elementsInGroup);
List<String> result = new ArrayList<String>(lists.size());
for (List<String> group : lists) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < group.size(); i++) {
sb.append(group.get(i));
if (i == group.size() - 1) {
sb.append(";");
} else {
sb.append(", ");
}
}
result.add(sb.toString());
}
return result;
}
public static void main(String[] args) {
List<String> list = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11");
System.out.println(splitByGroupAsList(list, 5));
// [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11]]
System.out.println(splitByGroupAsString(list, 5));
// [1, 2, 3, 4, 5;, 6, 7, 8, 9, 10;, 11;]
}
}
答案 2 :(得分:0)
您还可以尝试使用List的Object *地图。
*根据需要更改对象。
答案 3 :(得分:0)
考虑到您需要列表作为输出,您可以尝试这样做。我还没有尝试过编译它,所以可能会出现一些语法错误和拼写错误。但主要的想法是每次从原始列表中选择5个元素并将它们添加到新列表中。保留listOfLists
,最终包含所有这些新列表。
ArrayList<ArrayList<String>> listOfLists = new ArrayList<ArrayList<String>>();
int size=list.length %5=0?i/5:i/5+1;
for(int i=0;i<size;i++){
listOfLists.add(Arrays.copyOfRange(list, i*5, i*5+5));
}
# return listOfLists;