【发布时间】:2015-11-25 20:47:44
【问题描述】:
假设您要流式传输迭代器的元素;让我们使用一个Scanner 的具体示例,它实现了Iterator<String>。
给定一个Iterator,说:
// Scanner implements Iterator<String>
Iterator<String> scanner = new Scanner(System.in);
从中创建Stream<String> 的选项很笨重:
StreamSupport.stream(
Spliterators.spliteratorUnknownSize(scanner, Spliterator.ORDERED), false);
或者更简洁,但钝:
StreamSupport.stream(
((Iterable<String>) () -> new Scanner(System.in)).spliterator(), false);
在给定Iterator<T> 的情况下,JDK 中是否有返回Stream<T> 的工厂方法?
【问题讨论】:
-
你说
new Scanner(System.in); // it's an Iterable<String>让我很困惑 -
没有更简单的方法,但这真的那么普遍,需要更简单的方法吗?
-
@holger 因为
class Scanner implements Iterator<String>是的,我经常想流式传输迭代器的元素(当然不仅仅是扫描仪,这只是不是集合的 Itrator 的示例)跨度> -
对于它的价值,关于扫描仪,https://bugs.openjdk.java.net/browse/JDK-8072722。
标签: java iterator java-8 java-stream iterable