如何在 Iterable 上执行 Stream 函数?

在 Java 8 中,Stream 类没有任何方法来包装 Iterable.

In Java 8, the Stream class does not have any method to wrap a an Iterable.

相反,我从 Iterable 获取 Spliterator,然后像这样从 StreamSupport 获取 Stream:

Instead, I am obtaining the Spliterator from the Iterable and then obtaining a Stream from StreamSupport like this:

boolean parallel = true;

StreamSupport.stream(spliterator(), parallel)
                .filter(Row::isEmpty)
                .collect(Collectors.toList())
                .forEach(this::deleteRow);

是否有其他方法可以在我缺少的 Iterable 上生成 Stream 操作?

Is there some other way of generating Stream operations on an Iterable that I am missing?

推荐答案

我的类似问题被标记为重复,但这里是我用来避免一些样板的帮助方法:

My similar question got marked as duplicate, but here is the helper methods I've used to avoid some of the boilerplate:

public static <T> Stream<T> stream(Iterable<T> in) {
    return StreamSupport.stream(in.spliterator(), false);
}

public static <T> Stream<T> parallelStream(Iterable<T> in) {
    return StreamSupport.stream(in.spliterator(), true);
}

相关文章