使用Java 8 JDK将Iterable转换为Stream

使用Java 8 JDK将Iterable转换为Stream

我有一个返回的界面java.lang.Iterable<T>

我想使用Java 8 Stream API来操纵该结果。

但是Iterable不能“流”。

知道如何将Iterable用作Stream而不将其转换为List吗?


largeQ
浏览 1463回答 3
3回答

千巷猫影

因此,另一个答案提到Guava通过使用以下方式支持:Streams.stream(iterable);我想强调一下,实现与其他建议的答案略有不同。如果属于他们Iterable的类型Collection。public&nbsp;static&nbsp;<T>&nbsp;Stream<T>&nbsp;stream(Iterable<T>&nbsp;iterable)&nbsp;{ &nbsp;&nbsp;return&nbsp;(iterable&nbsp;instanceof&nbsp;Collection) &nbsp;&nbsp;&nbsp;&nbsp;?&nbsp;((Collection<T>)&nbsp;iterable).stream() &nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;StreamSupport.stream(iterable.spliterator(),&nbsp;false);}public&nbsp;static&nbsp;<T>&nbsp;Stream<T>&nbsp;stream(Iterator<T>&nbsp;iterator)&nbsp;{ &nbsp;&nbsp;return&nbsp;StreamSupport.stream( &nbsp;&nbsp;&nbsp;&nbsp;Spliterators.spliteratorUnknownSize(iterator,&nbsp;0), &nbsp;&nbsp;&nbsp;&nbsp;false &nbsp;&nbsp;);}

心有法竹

解决此问题的一个非常简单的方法是创建一个包含方法的Streamable<T>接口扩展。Iterable<T>default <T> stream()interface&nbsp;Streamable<T>&nbsp;extends&nbsp;Iterable<T>&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;Stream<T>&nbsp;stream()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;StreamSupport.stream(spliterator(),&nbsp;false); &nbsp;&nbsp;&nbsp;&nbsp;}}现在你Iterable<T>的任何一个都可以通过声明它们implements Streamable<T>来代替它而轻而易举Iterable<T>。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java