Я наткнулся на какой-то хитрый код, чтобы конвертировать 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, как его можно присвоить этой лямбда?
