private <T> TileData<List<T>> compose (List<TileData<List<T>>> candidates, int startIndex, int numComponents, int increment) { List<TileData<List<T>>> components = new ArrayList<>(); for (int c=0; c<numComponents; ++c) { components.add((TileData) candidates.get(startIndex + c * increment)); } return new MultiSliceTileView<T>(components); }