Split a list into fixed-size batches

Java
import java.util.ArrayList;
import java.util.List;

/** Chunk helpers used to batch API calls and SQL IN lists. */
public final class ListChunker {

    private ListChunker() {
    }

    /** Returns consecutive views, each at most {@code size} elements. */
    public static <T> List<List<T>> chunk(List<T> items, int size) {
        if (size <= 0) {
            throw new IllegalArgumentException("size must be positive: " + size);
        }
        List<List<T>> chunks = new ArrayList<>();
        for (int start = 0; start < items.size(); start += size) {
            int end = Math.min(start + size, items.size());
            chunks.add(List.copyOf(items.subList(start, end)));
        }
        return chunks;
    }

    public static void main(String[] args) {
        List<Integer> ids = List.of(1, 2, 3, 4, 5, 6, 7);
        ListChunker.chunk(ids, 3).forEach(System.out::println);
        // [1, 2, 3] / [4, 5, 6] / [7]
    }
}