code: public <RowT> ServerStreamingCallable<Query, RowT> readRowsCallable(RowAdapter<RowT> rowAdapter) {
      return stub.createReadRowsCallable(rowAdapter);
    }
docs: Streams back the results of the query. This callable allows for customization of the logical
  representation of a row. It's meant for advanced use cases.
  
  <p>Sample code:
  
  <pre>{@code
  try (BigtableDataClient bigtableDataClient = BigtableDataClient.create("[PROJECT]", "[INSTANCE]")) {
  String tableId = "[TABLE]";
  
  Query query = Query.create(tableId)
  .range("[START KEY]", "[END KEY]")
  .filter(FILTERS.qualifier().regex("[COLUMN PREFIX].*"));
  
  // Iterator style
  try {
  for(CustomRow row : bigtableDataClient.readRowsCallable(new CustomRowAdapter()).call(query)) {
  // Do something with row
  }
  } catch (NotFoundException e) {
  System.out.println("Tried to read a non-existent table");
  } catch (RuntimeException e) {
  e.printStackTrace();
  }
  }
  }</pre>
  
  @see ServerStreamingCallable For call styles.
  @see Query For query options.
  @see com.google.cloud.bigtable.data.v2.models.Filters For the filter building DSL.