Lambda expressions, introduced in Java 8, allow you to write more compact, readable, and functional-style code by expressing instances of functional interfaces using a clear and concise syntax.
What Is a Lambda Expression?
A lambda expression is a short block of code that takes in parameters and returns a value. It can be used to implement the abstract method of a functional interface (an interface with a single abstract method).
Syntax of a Lambda Expression
java
(parameters) -> expression
// or
(parameters) -> {
// multiple statements
return result;
}
Example:
java
(int a, int b) -> a + b
Functional Interfaces
These are interfaces with only one abstract method. Examples:
Runnable
Callable
Comparator<T>
Predicate<T>
Function<T, R>
Consumer<T>
Supplier<T>
You can create your own with @FunctionalInterface
:
java
@FunctionalInterface
interface MathOperation {
int operate(int a, int b);
}
Using Lambdas with Collections
1. Sorting a list:
java
List<String> names = Arrays.asList("John", "Alice", "Bob");
names.sort((a, b) -> a.compareToIgnoreCase(b));
2. Filtering with Stream API:
java
names.stream()
.filter(name -> name.startsWith("A"))
.forEach(System.out::println);
Examples of Common Functional Interfaces
Predicate (returns boolean):
java
Predicate<String> startsWithA = s -> s.startsWith("A");
Function (transforms input to output):
java
Function<String, Integer> lengthFunc = s -> s.length();
Consumer (accepts input, returns nothing):
java
Consumer<String> print = s -> System.out.println(s);
Supplier (provides a value):
java
Supplier<Double> random = () -> Math.random();
Lambda vs Anonymous Classes
Before Java 8:
java
Runnable r = new Runnable() {
public void run() {
System.out.println("Running...");
}
};
With Lambda:
java
Runnable r = () -> System.out.println("Running...");
Best Practices
- Use lambdas to simplify boilerplate code.
- Keep lambdas short and focused — use method references if it gets too long.
- Prefer descriptive variable names within lambdas.
- Avoid side-effects within lambda expressions when possible.
Method References (Shorter Syntax)
Instead of:
java
list.forEach(s -> System.out.println(s));
Use:
java
list.forEach(System.out::println);
Lambda expressions make Java code more expressive and align it with modern functional programming trends. Mastering them helps you write cleaner, more efficient code, especially when working with streams and collections.