Split larger collection (Collections, Arrays, List) into smaller collections in Java and also keep track of last one returned

Maybe I don't understand the question, but this is part of List:

List<E> subList(int fromIndex, int toIndex)

Returns a view of the portion of this list between the specified fromIndex, inclusive, and toIndex, exclusive. (If fromIndex and toIndex are equal, the returned list is empty.) The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa. The returned list supports all of the optional list operations supported by this list.

This method eliminates the need for explicit range operations (of the sort that commonly exist for arrays). Any operation that expects a list can be used as a range operation by passing a subList view instead of a whole list. For example, the following idiom removes a range of elements from a list:

list.subList(from, to).clear();

docs.oracle.com/javase/1.5.0/docs/api/java/util/List.html


This is simple: just use Lists.partition() from Guava. If I understand what you want correctly, it's exactly what it does.


private int runs = 0;

public void setRunsOneMore() {
    runs++;
}

    public void setRunsOneLess() {
    runs--;
}

public Collection<Comment> getCommentCollection() {
    commentCollection = movie.getCommentCollection();
    Collection[] com = split((List<Comment>) commentCollection,4);
    try{
        return com[runs];
     } catch(ArrayIndexOutOfBoundsException e) {
       runs = 0;
      }
    return com[runs];
}

public Collection[] split(List<Comment> list, int size){

     int numBatches = (list.size() / size) + 1;
     Collection[] batches = new Collection[numBatches];
     Collection<Comment> set = commentCollection;

     for(int index = 0; index < numBatches; index++) {
         int count = index + 1;
         int fromIndex = Math.max(((count - 1) * size), 0);
         int toIndex = Math.min((count * size), list.size());
         batches[index] = list.subList(fromIndex, toIndex);
     }

     return batches;
 }

Setting the current "run" with the next & previous button actions

public String userNext() {
    userReset(false);
    getUserPagingInfo().nextPage();
    movieController.setRunsOneMore();
    return "user_movie_detail";
}

public String userPrev() {
    userReset(false);
    getUserPagingInfo().previousPage();
    movieController.setRunsOneLess();
    return "user_movie_detail";
}