Como dar um Break no FOREACH java

5 respostas Resolvido
java
R

Pessoal to precisando dar um break dentro do foreach… to vendo alguns materiais na internet dizendo uma coisa ou outra, mas nada funciona.

Ja tentei “continue”, “throw new BreakException”,“break”,“GOTO”.

A unica coisa que deu certo foi system.exit(); Mas isso é uma coisa fora de questão.
Tambem preciso deixar claro que preciso do FOREACH.

Se alguem puder me ajudar agradeço. segue o código.

@FXML
	private void salvar() {
		conta = 0;
		criarTempExcel(rows);
		rows.forEach(row -> {
			try {
				if (row.getCell(0).getCellType().toString() != "BLANK") {
					List<Cell> cells = (List<Cell>) toList(row.cellIterator());
					try {
						ExcelLoadDao.getInstance().popularTemporaria(cells);
						conta ++;
						
					} catch (SQLException e) {
						JOptionPane.showMessageDialog(null, "Erro ao salvar carga: ");
                                      **O BREAK DEVERIA ESTAR AQUI**
						
						
					} catch (Exception e) {
						JOptionPane.showMessageDialog(null, "Erro ao salvar carga: ");	
                                      **O BREAK DEVERIA ESTAR AQUI**
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		});

5 Respostas

L

Vc consegue com um return (que irá interromper a execução da função lambda).

List<Integer> n = Stream.of(1,2,3,4,5,6,7,8,9,0).collect(Collectors.toList());
		
n.forEach(num -> {
	if (num > 5) {
		return;
	}
	
	System.out.println(num);
});

Porém, acho que seu código ficaria melhor assim:

try {
	rows.stream()
		.filter(row -> row.getCell(0).getCellType().toString() != "BLANK")
		.map(row -> row.cellIterator())
		.forEach(cells -> {
			try {
				ExcelLoadDao.getInstance().popularTemporaria(cells);
				conta++;
			} catch(Exception ex) {
				throw new ErroPopularTemporariaException(ex); // Essa "ErroPopularTemporariaException" deve ser RuntimeException
			}
		});
} catch (ErroPopularTemporariaException e) {
	JOptionPane.showMessageDialog(null, "Erro ao salvar carga: " + e.getMessage());
}
R

Obrigado pela resposta Lucas, to tentando implementar aqui mas da erro no ErroPopularTemporariaException(ex);

sou novo em programação

L
Solucao aceita

Tu tem que criar essa classe.

public class ErroPopularTemporariaException extends RuntimeException {
	public ErroPopularTemporariaException(Throwable cause) {
		super(cause);
	}
}
R

Agradeço demais amigo

L

Deu certo?

Ah, para enxugar mais o código, vc pode fazer com que o método popularTemporaria lance a exceção ErroPopularTemporariaException em caso de erro. Com isso, vc poderá remover o try ... catch do foreach. É uma solução para deixar o código mais limpo.

Criado 14 de agosto de 2020
Ultima resposta 14 de ago. de 2020
Respostas 5
Participantes 2