If you allow exceptions then this greatly increases the complexity of your code as anything can throw an exception. This makes your code harder to reason about, write and read. Exceptions also break referential transparency when they are caught and an action taken. This has bad consequences and there is a better way.
Given the extra complications Java chose not to allow exceptions in your lambda expressions.
So how does functional programming handle these cases? We need a data structure that has the expected value or contains the exception. These are usually handled by an Either data structure with a left value (the error/exception) or the expected (correct) right value (right as a mnemonic for correct). This is called a right biased Either, as it is expected that the right value contains the correct value. So we need to convert methods that throw exceptions to functions that return an Either.
An example of this is FunctionalJava's Try family of interfaces (https://functionaljava.ci.cloudbees.com/job/master/javadoc/). Taking a consumer example, we reuse the Try0
interface
public interface Try0<A, Z extends Exception> {
A f() throws Z;
}
and then convert this to a lazy right biased either (fj.data.Validation):
list.forEach(Try.f(() -> methodWithException())._1())
We can either now take action on the exception, or simply ignore it.