Как создать исходный текст Akka из клиента RestApi

Я хочу, чтобы потоковые объекты, которые читаются через Java-клиент RestApi. Клиент читает набор данных постраничным способом.

Решение, которое я придумал, состояло в том, чтобы создать Источник из Итерируемого, где эта итерация лениво загружает страницы, поскольку источник получает потребность в большем количестве элементов.

Это выглядит примерно так:

Source.from(myClient.getObjects())


public class MyClient<T> {

    public Iterable<T> getObjects() {
        return new Iterable<T>() {
            @Override
            @Nonnull
            public Iterator<T> iterator() {
                return new MyIterator<>(this);
            }
        };
    }


    private class MyIterator<T> implements Iterator<T> {
        private final MyClient client;
        private final Queue<T> latestPage;
        boolean end = false;

        MyIterator(MyClient client) {
            this.client = client;
            latestPage = new LinkedList<>();
            latestPage.addAll(loadNextPage());
        }

        private Collection<T> loadNextPage() {
            Collection<T> nextPage = client.getNextPage();
            if (nextPage.isEmpty()) {
                end = true;
            }
            return nextPage;
        }

        @Override
        public boolean hasNext() {
            if (latestPage.isEmpty() && (!end)) {
                latestPage.addAll(loadNextPage());
            }
            return !latestPage.isEmpty();
        }

        @Override
        public T next() {
            return latestPage.poll();
        }
    }
}

Кажется, это работает нормально. Но потом я заметил это в документации:

Source.from () Потоковые значения Iterable. Убедитесь, что Iterable неизменен или, по крайней мере, не изменен после использования в качестве источника.

Вопросы:

  1. Это хороший подход для потоковой передачи постраничных элементов?
  2. MyIterator изменчив. Это вызовет проблемы?
  3. В чем разница между Source.from и Source.fromIterator

0 ответов

Другие вопросы по тегам