Редактировать: Хольгер нашел гораздо более ясное решение:
public static IntStream intListToIntStream(IntList intList) {
return IntStream.range(0, intList.size()).map(intList::get);
}
После изучения кода IntIterator
оказалось, что реализация эквивалентна этому, поэтому приведенные ниже решения не нужны.Вы можете даже сделать это более эффективным, используя .parallel()
.
Если вы используете Java 9, вы можете использовать этот метод :
public static IntStream intListToIntStream(IntList intList) {
IntIterator intIter = intList.intIterator();
return IntStream.generate(() -> 0)
.takeWhile(i -> intIter.hasNext())
.map(i -> intIter.next());
}
В противном случае я не вижу лучшего решения, чем обернуть IntIterator в PrimitiveIterator.OfInt и создать из него поток:
public static IntStream intListToIntStream(IntList intList) {
IntIterator intIter = intList.intIterator();
return StreamSupport.intStream(Spliterators.spliterator(new PrimitiveIterator.OfInt() {
@Override
public boolean hasNext() {
return intIter.hasNext();
}
@Override
public int nextInt() {
return intIter.next();
}
}, intList.size(), Spliterator.ORDERED), false);
}
В любом случаеВы можете просто получить Stream<Integer>
, позвонив по номеру IntStream.boxed()
.