</>

Technology

Java Programs

Difficulty

Advanced

Interview Question

Write a Java program using Java 8 features: Lambda expressions, Stream API, and Optional.

Answer

Java 8 Features: Lambda, Streams, Optional

1. Lambda Expressions

Java
import java.util.*;
import java.util.function.*;

public class LambdaDemo {
    public static void main(String[] args) {

        // Before Java 8 — Anonymous class
        Runnable oldWay = new Runnable() {
            @Override
            public void run() {
                System.out.println("Old way");
            }
        };

        // Java 8 — Lambda
        Runnable lambda = () -> System.out.println("Lambda way");

        // Lambda with parameter
        Comparator<String> comp = (a, b) -> a.compareTo(b);

        // Common functional interfaces
        Predicate<Integer> isEven  = n -> n % 2 == 0;
        Function<String, Integer> len = s -> s.length();
        Consumer<String> printer   = s -> System.out.println(s);
        Supplier<String> greeting  = () -> "Hello, QA!";

        System.out.println(isEven.test(4));       // true
        System.out.println(len.apply("Selenium")); // 8
        printer.accept("Testing");                  // Testing
        System.out.println(greeting.get());         // Hello, QA!
    }
}

2. Stream API

Java
import java.util.stream.*;

List<String> tools = Arrays.asList(
    "Selenium", "TestNG", "Cucumber", "Maven", "Jenkins", "Postman"
);

// filter + collect
List<String> longNames = tools.stream()
    .filter(t -> t.length() > 6)
    .collect(Collectors.toList());
System.out.println("Long names: " + longNames);  // [Selenium, TestNG, Cucumber, Jenkins, Postman]

// map — transform
List<String> upperTools = tools.stream()
    .map(String::toUpperCase)
    .collect(Collectors.toList());
System.out.println("Uppercase: " + upperTools);

// sorted
List<String> sorted = tools.stream()
    .sorted()
    .collect(Collectors.toList());
System.out.println("Sorted: " + sorted);

// count
long count = tools.stream().filter(t -> t.startsWith("S")).count();
System.out.println("Starts with S: " + count);  // 2

// anyMatch / allMatch / noneMatch
boolean anySelenium = tools.stream().anyMatch(t -> t.equals("Selenium"));
System.out.println("Has Selenium: " + anySelenium);  // true

// forEach
tools.stream().forEach(t -> System.out.print(t + " "));

// reduce
int totalLength = tools.stream()
    .mapToInt(String::length)
    .sum();
System.out.println("Total chars: " + totalLength);

3. Optional (Null-Safe)

Java
import java.util.Optional;

Optional<String> opt1 = Optional.of("Selenium");
Optional<String> opt2 = Optional.empty();
Optional<String> opt3 = Optional.ofNullable(null);  // safe for null

System.out.println(opt1.isPresent());    // true
System.out.println(opt2.isPresent());    // false
System.out.println(opt1.get());          // Selenium
System.out.println(opt2.orElse("Default"));  // Default
System.out.println(opt3.orElseGet(() -> "Generated Default"));

// Map with Optional
Optional<Integer> length = opt1.map(String::length);
System.out.println(length.get());  // 8

Automation Testing Relevance

Java
// Filter visible elements using Stream
List<WebElement> allElements = driver.findElements(By.css(".product"));
List<WebElement> visible = allElements.stream()
    .filter(WebElement::isDisplayed)
    .collect(Collectors.toList());

// Extract text from all elements
List<String> texts = allElements.stream()
    .map(WebElement::getText)
    .collect(Collectors.toList());

// Find element by text using Optional (null-safe)
Optional<WebElement> button = driver.findElements(By.tagName("button"))
    .stream()
    .filter(b -> b.getText().equals("Submit"))
    .findFirst();

button.ifPresent(WebElement::click);  // click only if found

Follow AutomateQA