</>

Technology

Core Java

Difficulty

Intermediate

Interview Question

What are Java 8 Lambda Expressions and how do you use them?

Answer

Java 8 Lambda Expressions

A lambda expression is a concise way to represent an anonymous function (a method without a name). It enables functional programming in Java.

Syntax

Java
// Traditional anonymous class
Runnable r = new Runnable() {
    @Override
    public void run() {
        System.out.println("Running");
    }
};

// Lambda equivalent — much cleaner
Runnable r = () -> System.out.println("Running");

Lambda Syntax:

CODE
(parameters) -> expression
(parameters) -> { statements; }

Examples

No Parameters

Java
Runnable r = () -> System.out.println("Hello Lambda!");
r.run();

Single Parameter (parentheses optional)

Java
Consumer<String> print = name -> System.out.println("Hello, " + name);
print.accept("Alice");

Multiple Parameters

Java
Comparator<Integer> compare = (a, b) -> a - b;
System.out.println(compare.compare(3, 7)); // -4 (3 < 7)

With Return

Java
Function<Integer, Integer> square = n -> n * n;
System.out.println(square.apply(5)); // 25

// Multi-line — needs {} and return
Function<Integer, String> grade = score -> {
    if (score >= 90) return "A";
    if (score >= 80) return "B";
    return "C";
};

With Collections

Java
List<String> names = Arrays.asList("Charlie", "Alice", "Bob", "Dave");

// Sort with lambda
names.sort((a, b) -> a.compareTo(b));
// or even simpler
names.sort(String::compareTo); // method reference

// forEach with lambda
names.forEach(name -> System.out.println(name));
// or method reference
names.forEach(System.out::println);

// removeIf
names.removeIf(name -> name.startsWith("A"));

Common Functional Interfaces

InterfaceMethodDescription
Runnablerun()No input, no output
Supplier<T>get()No input, returns T
Consumer<T>accept(T)Takes T, no return
Function<T,R>apply(T)Takes T, returns R
Predicate<T>test(T)Takes T, returns boolean
BiFunction<T,U,R>apply(T,U)Takes two inputs
Java
Predicate<String> isEmpty = s -> s.isEmpty();
Predicate<Integer> isEven = n -> n % 2 == 0;

System.out.println(isEmpty.test(""));    // true
System.out.println(isEven.test(4));      // true

// Combine predicates
Predicate<Integer> isPositiveEven = isEven.and(n -> n > 0);
System.out.println(isPositiveEven.test(6));  // true
System.out.println(isPositiveEven.test(-6)); // false

In Automation Testing

Java
// Sort test data
List<String> testUsers = Arrays.asList("admin", "user1", "guest", "moderator");
testUsers.sort((a, b) -> a.length() - b.length()); // sort by length

// Filter elements — find visible dropdowns
List<WebElement> dropdowns = driver.findElements(By.tagName("select"));
List<WebElement> visible = dropdowns.stream()
    .filter(el -> el.isDisplayed())
    .collect(Collectors.toList());

// Execute test step with timeout
Supplier<Boolean> condition = () -> driver.findElement(By.id("result")).isDisplayed();

Follow AutomateQA

Related Topics