Я наткнулся на какой-то хитрый код, чтобы конвертировать Iterator в Stream из Karol на этот пост. Я должен признать, что я не совсем понимаю, как lambda можно присвоить типу Iterable
в следующем коде...
static <T> Stream<T> iteratorToFiniteStream(final Iterator<T> iterator) {
final Iterable<T> iterable = () -> iterator;
return StreamSupport.stream(iterable.spliterator(), false);
}
Я решил написать свой собственный небольшой тест, чтобы убедиться, что он компилируется и выполняется, и это происходит.
public void printsStream_givenIterator()
{
Iterator<String> iterator = Arrays.asList("a", "b", "c").iterator();
final Iterable<String> iterable = () -> iterator;
StreamSupport.stream(iterable.spliterator(), false).forEach(s -> System.out.println(s));
}
// prints: abc
Я понимаю, что lambda () -> iterator
действует как функция Supplier.
Iterable не FunctionalInterface, как его можно присвоить этой лямбда?