Core Java
20 โ Streams & Optional
Previous: 19 Lambdas & Functional ยท Next: 21 Java Versions
โถ๏ธ java pkg1core/core22StreamsDemo.java ยท java pkg1core/core23OptionalDemo.java
Stream pipeline
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
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
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
Source named in this chapter
- core22StreamsDemopkg1core/core22StreamsDemo.java
- core23OptionalDemopkg1core/core23OptionalDemo.java