使用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
提交
取消
