Como trazer apenas alguns elementos de um arraylist?

Bom dia.
Estou com uma lista implementada que retorna N elementos.
Eu percorro a lista neste formato;

for (int x = 0; x < statusCorrigido.size(); x++) {
	for (int i = 0; i <= 4; i++) {
		if (i == 1) {
			statusCorrigido.get(i).setNome_sistema("SMS");
		} else if (i == 2) {
			statusCorrigido.get(i).setNome_sistema("ALAS");
		} else if (i == 3) {
			statusCorrigido.get(i).setNome_sistema("NATAS");
		} else if (i == 4) {
			statusCorrigido.get(i).setNome_sistema("PERF");
		}
		
		bw.newLine();
		
		bw.write(
			statusCorrigido.get(x).getLogin() + ";" + 
			statusCorrigido.get(x).getNome() + ";" + 
			statusCorrigido.get(x).getCpf() + ";" + 
			statusCorrigido.get(x).getData_desligamento() + ";" + 
			statusCorrigido.get(x).getNome_sistema() + ";" + 
			statusCorrigido.get(x).getData_gravacao() + ";" + 
			statusCorrigido.get(x).getStatus() + ";" + 
			statusCorrigido.get(x).getProtocolo() + ";" + 
			statusCorrigido.get(x).getData_processado()
		);
	}
}

O problema é que o resultado obtido é a lista inteira dos objetos como no exemplo.

Login	Sistema	Data/Hora Gravação	Status por base	Protocolo	Processado	
Z014190	SALES	2021-04-05 11:11:06.0	SUCESSO	null	2021-04-05 13:37:04.0	
Z014190	SALES	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 13:37:04.0	
Z014190	SALES	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 13:37:04.0	
Z014190	SALES	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 13:37:04.0	
Z014190	SALES	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 13:37:04.0	
Z014190	SMS	2021-04-05 11:11:06.0	SUCESSO	null	2021-04-05 11:49:37.0	
Z014190	SMS	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 11:49:37.0	
Z014190	SMS	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 11:49:37.0	
Z014190	SMS	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 11:49:37.0	
Z014190	SMS	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 11:49:37.0	
Z014190	ATAS	2021-04-05 11:11:06.0	SUCESSO	null	2021-04-05 11:30:45.0	
Z014190	ATAS	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 11:30:45.0	
Z014190	ATAS	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 11:30:45.0	
Z014190	ATAS	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 11:30:45.0	
Z014190	ATAS	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 11:30:45.0	
Z014190	NATAS	2021-04-05 11:11:06.0	SUCESSO	null	2021-04-05 11:27:11.0	
Z014190	NATAS	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 11:27:11.0	
Z014190	NATAS	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 11:27:11.0	
Z014190	NATAS	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 11:27:11.0	
Z014190	NATAS	2021-04-05 11:11:06.0	NAO CADASTRADO	null	2021-04-05 11:27:11.0	
Z014190	PERF	2021-04-05 11:11:06.0	SUCESSO	null	2021-04-05 11:49:36.0	

Quando na verdade eu gostaria de apenas os 5 primeiro resultados de cada objeto por exemplo.

Login Sistema Data/Hora Gravação Status por base Protocolo Processado
Z192671 SALES 2021-03-29 10:14:10.0 AGUARDANDO null null
Z192671 SMS 2021-03-29 10:14:11.0 AGUARDANDO null 2021-03-29 15:14:55.0
Z192671 ATAS 2021-03-29 10:14:11.0 AGUARDANDO null null
Z192671 NATAS 2021-03-29 10:14:11.0 AGUARDANDO null null
Z192671 PERF 2021-03-29 10:14:11.0 AGUARDANDO null null

Sendo assim para cada objeto da lista.

Pelo amor de deus, a cada iteração você está chamando 10 vezes o método statusCorrigido.get.
Chama uma vez só utilizando uma variável local.

Só 5 primeiros elementos?
Use uma contagem no seu for.
Exemplo:

int count = 1;
for () {
    if (count == 6) {
        break;
    }
    count++;
}

Dá pra fazer com a API Stream também, método limit().

Edit: você já tem a variável x, use ela.

Não entendi muito bem qual a lógica por trás de statusCorrigido.get(i) e statusCorrigido.get(x), mas penso que o bw.write talvez deva ficar fora do for interno. Com isso, a linha não será escrita 4 vezes para cada iteração do for externo.

Nesse caso, o statusCorrigido não é um método, mas sim a minha Lista.

@RoinujNosde
Sim, eu entendi o conceito, mas tem que ser para cada objeto diferente da minha lista, ou seja leio os 5 primeiros, ignoro o restante até o objeto ser diferente e ai leio novamente.
Exemplo

Nessa Lista

[ z1234,z1234,z1234,z1234,z1234 ,z1234,z1234,z1234,z1234, z54321,z54321,z54321,z54321,z54321 ,z54321,z54321]

minha necessidade é pegar os 5 primeiro casos do z1234, depois os 5 primeiros casos do z54321.

@Lucas_Camara

Neste formato, ele iria colocar os novos status apenas nas 5 primeiras linhas, quando na verdade eu tenho que colocar em todas linhas de cada objeto novo, conforme descrevi ao amigo acima.

Faça uma variável fora do for para que possa armazenar a ultima coisa lida no loop e faça uma verificação com a próxima, se forem iguais continua o processo, se não for para.
Se for isso que eu entendi…

Desculpa, não compreendi.
Seria fazer tipo

String UltimoValor = statusCorrigido.get(i).getLogin().toString(); 

if(UltimoValor == statusCorridigo.get(i+1).getLogin()) {}

essa a ideia?

Exatamente, assim então você poderá comparar o último valor como o valor atual e saber se são iguais ou diferentes. E a cada loop você deve atualizar essa variável ultimoValor

Lembre-se de declarar a variável fora do for e dps atualiza-la dentro do for.

Entendi a ideia, mas ainda não esta dando o resultado esperado, na verdade quando faço essa comparação ele da erro de index na listagem.

		String ultimoValor = null;
		String nextPos = null;
		
		for (int i = 0; i <= 4; i++) {
			if (i == 1) {
				statusCorrigido.get(i).setNome_sistema("SMS");
			} else if (i == 2) {

				statusCorrigido.get(i).setNome_sistema("ATAS");
			} else if (i == 3) {
				statusCorrigido.get(i).setNome_sistema("NATAS");
			} else if (i == 4) {
				statusCorrigido.get(i).setNome_sistema("PERF");
			}

			for (int x = 0; x < statusCorrigido.size(); x++) {
				nextPos = statusCorrigido.get(x + 1).getLogin().toString();
				ultimoValor = statusCorrigido.get(x).getLogin().toString();					
				if (ultimoValor.equals(nextPos)) {
					bw.newLine();
					bw.write(statusCorrigido.get(x).getLogin() + ";" + statusCorrigido.get(x).getNome() + ";"
							+ statusCorrigido.get(x).getCpf() + ";" + statusCorrigido.get(x).getData_desligamento()
							+ ";" + statusCorrigido.get(x).getNome_sistema() + ";"
							+ statusCorrigido.get(x).getData_gravacao() + ";" + statusCorrigido.get(x).getStatus()
							+ ";" + statusCorrigido.get(x).getProtocolo() + ";"
							+ statusCorrigido.get(x).getData_processado());
				}
			}
		}

No caso meu amigo a nextPos não é a posição +1 é a posição atual (acho que expressei mal quando falei proxima posição), por isso que acho que está dando erro de index.
Tira esse +1 no nextPos

1 curtida

Compreendi.
Obrigado.