簡體   English   中英

Java流是否等同於具有變量賦值的while

[英]Is there Java stream equivalent to while with variable assignment

是否存在與以下內容等效的流

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

首先,感謝@OlivierGrégoire的評論。 它改變了我對新知識的回答。

為未知大小的nextInts編寫自己的Spliterator ,然后可以使用StreamSupport#stream 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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM