如何将ArrayList拆分为另一个List

时间:2014-09-23 16:28:32

标签: java arraylist

我试图将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;

由于

4 个答案:

答案 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;