Скажем, вы хотите передать элементы итератора в потоковом режиме; давайте использовать конкретный пример 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);
Есть ли где-нибудь в JDK фабричный метод, который возвращает Stream<T>
при наличии Iterator<T>
?
new Scanner(System.in); // it's an Iterable<String>
- person Holger   schedule 31.08.2015class Scanner implements Iterator<String>
и да, я часто хочу передавать элементы итератора (конечно, не только сканера, это просто пример Itrator, который не является коллекцией) - person Bohemian♦   schedule 01.09.2015Iterator
, не созданныеIterable
, с одной стороны,Scanner
является наиболее заметным (хотя я даже мало использую этот класс, как, когда я использую обычные выражений, мне обычно нужно больше контроля над операцией). Поскольку кажется, что в следующей версии Java он все равно получит особую обработку, какие еще примеры из реальной жизни остались? - person Holger   schedule 01.09.2015