Problema com ArrayList

Tenho uma lista que poderá sempre ter qualquer tamanho, deste 1 item até 10000 por exemplo.
Preciso que essa lista seja dividido em lista de múltiplo de 5.

Se eu tiver uma lista com 40 objetos, essa lista deverá ser dividida em 8 lista com 5 objetos.
Se eu tiver uma lista com 43 objetos, essa lista deverá ser dividida em 8 lista com 5 objetos e mais 1 com 3 objetos.

Tem alguma coisa do java que faça isso? ou vou ter que fazer isso eu mesmo? verificando se a lista está cheia ou não…

Bem simples.
Você cria uma lista(ou qualquer outra coisa) para salvar suas novas listas E cria uma lista auxiliar para ir salvando os objetos nela.
Depois percorre sua lista principal. Se o indice que voces estiver dividido por 5 por diferente de 0, então você adiciona na lista auxiliar. Caso contrato, se o indicie divido por 5 for igual a 0( 5,10,15…), você salva sua lista auxiliar e então zera ela:

[code]List listaPrincipal = new ArrayList();

	List<List<String>> listaDasListas = new ArrayList();
	for (int i =0; i<43; i++){
		listaPrincipal.add(""+i);
	}
	
	
	List<String> listaAuxiliar = new ArrayList();

	listaAuxiliar.add(listaPrincipal.get(0));
	for(int i=1; i<listaPrincipal.size();i++){
		if(i  % 5 != 0){
			listaAuxiliar.add(listaPrincipal.get(i));
		}else{
			listaDasListas.add(listaAuxiliar);
			listaAuxiliar = new ArrayList();
			listaAuxiliar.add(listaPrincipal.get(i));
		}
	}
	
	System.out.println(String.format("Quantidade de lista criadas: %s", listaDasListas.size()));[/code]

Se você usar isso aqui também deve funcionar. Ai não precisará da lista auxiliar.

for(int i=1; i<listaPrincipal.size();i++){
			if(i  % 5 == 0){
			listaDasListas.add(listaPrincipal.subList(i-5, i));
			}
		}

obs: tem que fazer um controle pra ultima lista.

Obrigado por responder!

é isso mesmo que eu faço, pensei que o java tinha alguma coisa que poderia auxiliar nesses casos e que eu não sabia =p,

Abraços!

Dá também para calcular a quantidade de elementos e fatias antes de começar a operação. Isso geralmente gera um código mais simples:

[code]public List<List>String>> dividir(List<String> lista, int tamanho) {
List<List<String>> result = new List<>();
int qtde = listaPrincipal.size() / tamanho;
int pedacos = Math.ceil((double)listaPrincipal.size() / tamanho);

 for (int i = 0; i &lt; pedacos; i++) {
       List&lt;String&gt; subLista = new List&lt;String&gt;();
       subLista.addAll(lista.subList(i*qtde, Math.min((i+1)*qtde, lista.size())));
       result.add(subLista);
 }
 return result;

}[/code]