有时在我的工作中,我需要与其他库集成,这些库将返回Iterator对象而不是列表。 从库的角度来看,这很好,但是当您想在返回的迭代器上使用Java 8流时,这可能是个问题。 有一种方法可以将Iterator转换为Iterable ,然后轻松进行流传输。
由于一直以来我都需要记住如何做,因此我决定在这里分享代码段。
Iterator<JsonValue> iterator = elements.iterator();
Iterable<JsonValue> valueIterable = () -> iterator;List<String> StreamSupport.stream(valueIterable.spliterator(), false).map(element -> element.asString())
.collect(Collectors.toList());
在示例中,首先,我们有一个Iterator类。 由于Iterator不能用作流,但是Iterable可以做,因此我们只创建一个新的Iterable类,该类重写其iterator()方法以返回要流式传输的Iterator 。
然后我们有一个Iterable ,它还不能流式传输。 因此,我们需要使用StreamSupport类将Iterable转换为Stream 。
这样便可以使用所有流操作而没有任何问题。
我们不断学习,
亚历克斯
翻译自: https://www.javacodegeeks.com/2018/08/java-iterator-stream.html