1. Common mistakes with Functional Java include doing too much in a single lambda, using block lambdas when a method would be better, mutating objects within streams, and not consuming streams.
2. Streams are lazy and should not be reused or mutate objects. It is better to return new copies of objects from streams.
3. Overusing forEach can indicate an opportunity to use more functional techniques.
4. With Optionals, always unpack values before using them and consider alternative flows like orElse and orElseGet.