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
