Core Java

20 โ€” Streams & Optional

Previous: 19 Lambdas & Functional ยท Next: 21 Java Versions

โ–ถ๏ธ java pkg1core/core22StreamsDemo.java ยท java pkg1core/core23OptionalDemo.java


Stream pipeline

java
1List<String> result = names.stream()2    .filter(s -> !s.isBlank())      // intermediate โ€” lazy3    .map(String::toUpperCase)       // intermediate4    .sorted()                       // intermediate5    .toList();                      // terminal โ€” triggers execution
Type Examples Lazy?
Intermediate filter, map, flatMap, sorted, distinct Yes
Terminal collect, forEach, reduce, count, toList Triggers pipeline

๐Ÿ’ก Streams are single-use โ€” create a new stream for a second pipeline.


Common operations

java
1long count = list.stream().filter(x -> x > 0).count();2int sum = list.stream().mapToInt(Integer::intValue).sum();3OptionalInt max = list.stream().mapToInt(Integer::intValue).max();4 5Map<String, List<User>> byDept = users.stream()6    .collect(Collectors.groupingBy(User::dept));

Optional โ€” avoid null returns

java
1Optional<User> findUser(int id) {2    User u = db.get(id);3    return Optional.ofNullable(u);4}5 6findUser(42)7    .map(User::name)8    .filter(n -> !n.isBlank())9    .ifPresentOrElse(System.out::println, () -> System.out.println("missing"));
Do Don't
Return Optional from lookup methods Use as field or method parameter
Use orElse, orElseGet, ifPresent Call .get() without checking

Milestone: You completed Core APIs (chapters 16โ€“20). ๐ŸŽ‰

Interview drill โ†’ 06 Streams

Next โ†’ 21 Java Versions