Архив рубрики: Gist

Java List split

Долго валялось в закладках на SO — и пригодилось, наконец. Обычно — или уже была «в коробке» Guava с Lists.partition(), или — Apache Commons и его ListUtils.partition().

Деление на подмножества (каплю доработано относительно исходника на SO):

// https://stackoverflow.com/a/30072617
public static <T> Stream<List<T>> listPartition(@NotNull List<T> source, @Positive int length) {
    requireNonNull(source, "Source list must not be null");
    if (length <= 0) {
        throw new IllegalArgumentException("Partitions length must be greater than zero");
    }
    int size = source.size();
    if (size == 0) {
        return Stream.empty();
    }
    if (size <= length) {
        return Stream.of(source);
    }
    int fullChunks = (size - 1) / length;
    return IntStream.range(0, fullChunks + 1)
        .mapToObj(n -> source.subList(n * length, n == fullChunks ? size : (n + 1) * length));
}
Читать далее Java List split