code: public static Iterable<Table> listTables(final DataStore dataStore,
                                               final @Nullable String fromTableExclusive,
                                               final long limit) {
          return RestartingStreamingIterator.stream(fromTableExclusive, limit,
                  new StreamingIteratorSupplier<Table, String>() {
                      @Override
                      public Iterator<Table> get(String fromToken, long limit) {
                          return dataStore.listTables(fromToken, limit);
                      }
  
                      @Override
                      public String getNextToken(Table table) {
                          return table.getName();
                      }
                  });
      }
docs: Retrieves metadata about up to {@code limit} tables.  The records will be returned in a deterministic
  order but not sorted alphabetically by key.  If {@code fromTableExclusive} is not null, the list will
  start with the first table that follows the specified key in the returned sort order.