Como dar um Break no FOREACH java

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();
			}
		});

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());
}

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

sou novo em programação

Tu tem que criar essa classe.

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

Agradeço demais amigo

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.

1 curtida