Chaturmind
LearnDSASystem DesignBlogPremium
Sign inGet started
Chaturmind

Structured learning paths for engineers who want to go deep. Written by practitioners.

Learn

  • Java
  • DSA
  • System Design
  • Spring Boot
  • AI / ML

Company

  • Blog
  • Premium
  • Contact

Legal

  • Privacy Policy
  • Terms of Service

© 2026 Chaturmind. All rights reserved.

Built for engineers who want to go deep.


← Java Streams & Functional Programming

Lambdas & Functional Interfaces

  • Lambda Expressions
  • Method References

Streams API

  • Streams API
  • Collectors and groupingBy
  • Optional
Chaturmind
← Java Streams & Functional Programming

Lambdas & Functional Interfaces

  • Lambda Expressions
  • Method References

Streams API

  • Streams API
  • Collectors and groupingBy
  • Optional
HomeLearnJavaJava Streams & Functional ProgrammingLambdas & Functional Interfaces
✓ FreeIntermediate· 10 min read

Lambda Expressions

Replace anonymous classes with concise lambda syntax — the shift to functional Java.

Published February 1, 2025


Lambda Expressions

Lambdas are anonymous functions — a concise way to pass behaviour as data.

Before lambdas (anonymous class)

list.sort(new Comparator<String>() {
    @Override
    public int compare(String a, String b) {
        return a.compareTo(b);
    }
});

With lambda

list.sort((a, b) -> a.compareTo(b));
// Or even shorter with method reference:
list.sort(String::compareTo);

Functional Interfaces

A lambda can only be used where a functional interface (interface with exactly one abstract method) is expected.

InterfaceSignatureUse Case
Runnable() → voidRun a task
Supplier<T>() → TProduce a value
Consumer<T>T → voidConsume a value
Function<T,R>T → RTransform a value
Predicate<T>T → booleanTest a condition
BiFunction<T,U,R>(T,U) → RTwo-argument transform
Predicate<String> isLong = s -> s.length() > 5;
Function<String, Integer> length = String::length;
Consumer<String> printer = System.out::println;
Supplier<List<String>> newList = ArrayList::new;

Closure — capturing variables

Lambdas can capture local variables, but only if they are effectively final (never modified after assignment):

String prefix = "Hello, ";
Consumer<String> greet = name -> System.out.println(prefix + name); // ✅
prefix = "Hi, "; // ❌ compile error: prefix must be effectively final

Interview Tip

Know the four core functional interfaces (Supplier, Consumer, Function, Predicate) and when to use each. Interviewers also test whether you understand that lambdas don't create a new scope — this inside a lambda refers to the enclosing class, not the lambda.

Next

Method References

AI Tutor

Lesson: Lambda Expressions

Quick actions

AI responses can be inaccurate. Verify critical information.