使用Java 8 JDK将Iterable转换为Stream我有一个返回的界面java.lang.Iterable<T>。我想使用Java 8 Stream API来操纵该结果。但是Iterable不能“流”。知道如何将Iterable用作Stream而不将其转换为List吗?
3 回答
千巷猫影
TA贡献1829条经验 获得超7个赞
因此,另一个答案提到Guava通过使用以下方式支持:
Streams.stream(iterable);
我想强调一下,实现与其他建议的答案略有不同。如果属于他们Iterable
的类型Collection
。
public static <T> Stream<T> stream(Iterable<T> iterable) { return (iterable instanceof Collection) ? ((Collection<T>) iterable).stream() : StreamSupport.stream(iterable.spliterator(), false);}public static <T> Stream<T> stream(Iterator<T> iterator) { return StreamSupport.stream( Spliterators.spliteratorUnknownSize(iterator, 0), false );}
心有法竹
TA贡献1866条经验 获得超5个赞
解决此问题的一个非常简单的方法是创建一个包含方法的Streamable<T>
接口扩展。Iterable<T>
default <T> stream()
interface Streamable<T> extends Iterable<T> { default Stream<T> stream() { return StreamSupport.stream(spliterator(), false); }}
现在你Iterable<T>
的任何一个都可以通过声明它们implements Streamable<T>
来代替它而轻而易举Iterable<T>
。
添加回答
举报
0/150
提交
取消