Java - Stream - Collect every N elements

后端 未结 6 1306
忘掉有多难
忘掉有多难 2020-12-30 02:38

I am trying to learn java - stream. I am able to do simple iteration / filter / map / collection etc.

When I was kind of trying to collect every 3 elements and print

6条回答
  •  情书的邮戳
    2020-12-30 03:35

    You can actually use an IntStream to simulate your list's pagination.

    List list = Arrays.asList("a","b","c","d","e","f","g","h","i","j");
    
    int pageSize = 3;
    
    IntStream.range(0, (list.size() + pageSize - 1) / pageSize)
            .mapToObj(i -> list.subList(i * pageSize, Math.min(pageSize * (i + 1), list.size())))
            .forEach(System.out::println);
    

    which outputs:

    [a, b, c]
    [d, e, f]
    [g, h, i]
    [j]
    

    If you want to generate Strings, you can use String.join since you are dealing with a List directly:

    .mapToObj(i -> String.join("", list.subList(i * pageSize, Math.min(pageSize * (i + 1), list.size()))))
    

提交回复
热议问题