1) Java 8 introduced many new features to support functional programming in Java, such as lambda expressions, default methods in interfaces, and streams.
2) Lambda expressions allow implementing functional interfaces with anonymous methods, avoiding the need to create anonymous inner classes.
3) Default methods allow adding new methods to interfaces without breaking existing implementations, and streams allow performing bulk operations on collections in a declarative way.