Splitting List into sublists along elements

后端 未结 13 1943
野趣味
野趣味 2020-11-28 21:51

I have this list (List):

[\"a\", \"b\", null, \"c\", null, \"d\", \"e\"]

And I\'d like something like this:

13条回答
  •  悲&欢浪女
    2020-11-28 22:34

    With String one can do:

    String s = ....;
    String[] parts = s.split("sth");
    

    If all sequential collections (as the String is a sequence of chars) had this abstraction this could be doable for them too:

    List l = ...
    List> parts = l.split(condition) (possibly with several overloaded variants)
    

    If we restrict the original problem to List of Strings (and imposing some restrictions on it's elements contents) we could hack it like this:

    String als = Arrays.toString(new String[]{"a", "b", null, "c", null, "d", "e"});
    String[] sa = als.substring(1, als.length() - 1).split("null, ");
    List> res = Stream.of(sa).map(s -> Arrays.asList(s.split(", "))).collect(Collectors.toList());
    

    (please don't take it seriously though :))

    Otherwise, plain old recursion also works:

    List> part(List input, List> acc, List cur, int i) {
        if (i == input.size()) return acc;
        if (input.get(i) != null) {
            cur.add(input.get(i));
        } else if (!cur.isEmpty()) {
            acc.add(cur);
            cur = new ArrayList<>();
        }
        return part(input, acc, cur, i + 1);
    }
    

    (note in this case null has to be appended to the input list)

    part(input, new ArrayList<>(), new ArrayList<>(), 0)
    

提交回复
热议问题