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
| Interface | Method | Description |
|---|---|---|
Runnable | run() | 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();
