如何将ArrayList拆分为另一个List



我正在尝试将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;

感谢

我为您编写了两个方法。一种是将列表拆分为列表列表,另一种则将嵌套列表分组为单个字符串。

    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;]
        }
    }

试试这样的东西:

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]]

您也可以尝试使用List映射Object*
*根据需要更改对象。

考虑到您需要一个列表列表作为输出,您可以尝试一下。我还没有尝试编译它,所以可能会有一些语法错误和拼写错误。但主要的想法是每次从原始列表中选择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;

最新更新