</>

Technology

Core Java

Difficulty

Intermediate

Interview Question

What is the Stream API in Java 8? Explain with examples.

Answer

Java 8 Stream API

A Stream is a sequence of elements that can be processed in a functional, declarative way. Streams do NOT store data — they process elements from a source (Collection, Array, etc.).

Creating Streams

Java
// From Collection
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Stream<String> stream1 = names.stream();

// From Array
int[] arr = {1, 2, 3, 4, 5};
IntStream stream2 = Arrays.stream(arr);

// From values
Stream<String> stream3 = Stream.of("X", "Y", "Z");

// Infinite stream
Stream<Integer> infinite = Stream.iterate(0, n -> n + 2); // 0, 2, 4, 6...

Intermediate Operations (return a new Stream — lazy)

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

// filter — keep elements matching condition
List<String> aNames = names.stream()
    .filter(n -> n.startsWith("A"))
    .collect(Collectors.toList());
// ["Alice", "Anna"]

// map — transform each element
List<Integer> lengths = names.stream()
    .map(String::length)
    .collect(Collectors.toList());
// [5, 3, 7, 4, 5]

// sorted — sort elements
List<String> sorted = names.stream()
    .sorted()
    .collect(Collectors.toList());
// ["Alice", "Anna", "Bob", "Charlie", "David"]

// distinct — remove duplicates
List<Integer> unique = Arrays.asList(1, 2, 2, 3, 3, 3).stream()
    .distinct()
    .collect(Collectors.toList());
// [1, 2, 3]

// limit / skip
names.stream().limit(3)  // first 3
names.stream().skip(2)   // skip first 2

Terminal Operations (trigger execution)

Java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

// collect — gather into collection
List<Integer> evens = numbers.stream()
    .filter(n -> n % 2 == 0)
    .collect(Collectors.toList());
// [2, 4, 6, 8, 10]

// count
long count = numbers.stream().filter(n -> n > 5).count(); // 5

// findFirst / findAny
Optional<Integer> first = numbers.stream()
    .filter(n -> n > 3)
    .findFirst();
first.ifPresent(System.out::println); // 4

// min / max
Optional<Integer> max = numbers.stream().max(Integer::compareTo); // 10

// reduce — combine all elements
int sum = numbers.stream().reduce(0, Integer::sum); // 55

// forEach
numbers.stream().filter(n -> n % 2 == 0).forEach(System.out::println);

// anyMatch / allMatch / noneMatch
boolean anyEven   = numbers.stream().anyMatch(n -> n % 2 == 0);  // true
boolean allPositive = numbers.stream().allMatch(n -> n > 0);      // true
boolean noneNeg   = numbers.stream().noneMatch(n -> n < 0);       // true

Real Example — Employee Processing

Java
List<Employee> employees = getEmployees();

// Find all senior SDETs earning > 80k, sorted by salary descending
List<Employee> topSDETs = employees.stream()
    .filter(e -> e.getRole().equals("SDET"))
    .filter(e -> e.getSalary() > 80000)
    .sorted(Comparator.comparingDouble(Employee::getSalary).reversed())
    .limit(5)
    .collect(Collectors.toList());

// Group by department
Map<String, List<Employee>> byDept = employees.stream()
    .collect(Collectors.groupingBy(Employee::getDepartment));

// Average salary
OptionalDouble avgSalary = employees.stream()
    .mapToDouble(Employee::getSalary)
    .average();

In Automation Testing

Java
// Get all visible text from a list of elements
List<String> menuItems = driver.findElements(By.cssSelector(".nav-item"))
    .stream()
    .filter(WebElement::isDisplayed)
    .map(WebElement::getText)
    .collect(Collectors.toList());

// Check if expected option exists in dropdown
boolean hasOption = driver.findElements(By.tagName("option"))
    .stream()
    .map(WebElement::getText)
    .anyMatch(text -> text.equals("New York"));

Follow AutomateQA

Related Topics