private ResultScanner scan(Table ht, byte[] cf, Integer[] rowIndexes, Integer[] columnIndexes,
    Long[] versions, int maxVersions) throws IOException {
    byte startRow[] = Bytes.toBytes("row:" + Collections.min(Arrays.asList(rowIndexes)));
    byte endRow[] = Bytes.toBytes("row:" + Collections.max(Arrays.asList(rowIndexes)) + 1);
    Scan scan = new Scan().withStartRow(startRow).withStopRow(endRow);
    for (Integer colIdx : columnIndexes) {
      byte column[] = Bytes.toBytes("column:" + colIdx);
      scan.addColumn(cf, column);
    }
    scan.readVersions(maxVersions);
    scan.setTimeRange(Collections.min(Arrays.asList(versions)),
      Collections.max(Arrays.asList(versions)) + 1);
    ResultScanner scanner = ht.getScanner(scan);
    return scanner;
  }
Uses the TimestampFilter on a Get to request a specified list of versions for the row/column
specified by rowIdx & colIdx.
hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMultipleTimestamps.java