1. Common mistakes when using Functional Java include doing too much in a single lambda expression, using block lambdas when a method would be better, and mutating objects within streams.
2. Streams should not be used to mutate objects and can only be operated on once. It is better to return new copies of objects rather than mutating them.
3. ForEach should be avoided for anything other than side effects, and infinite streams need limiting to avoid running forever.
4. Optionals force unpacking values and calling get without checking for empty can cause exceptions.