Java流是否有相当于带有变量赋值的while

2023-11-23

是否存在与以下内容等效的流

List<Integer> ints;
while (!(ints = this.nextInts()).isEmpty()) {
// do work
}

首先,感谢@Olivier Grégoire 的评论。它改变了我对新知识的答案。

写你自己的Spliterator对于未知尺寸nextInts,那么你可以使用StreamSupport#stream创建一个流nextInts。例如:

generateUntil(this::nextInts, List::isEmpty).forEach(list -> {
    //do works
});

import static java.util.stream.StreamSupport.stream;

<T> Stream<T> generateUntil(final Supplier<T> generator, Predicate<T> stop) {
    long unknownSize = Long.MAX_VALUE;

    return stream(new AbstractSpliterator<T>(unknownSize, Spliterator.ORDERED) {
        @Override
        public boolean tryAdvance(Consumer<? super T> action) {
            T value = generator.get();

            if (stop.test(value)) {
                return false;
            }

            action.accept(value);
            return true;
        }
    }, false);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java流是否有相当于带有变量赋值的while 的相关文章

随机推荐