Practical Operations
Stream API Operations
Filtering Collections
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
List<String> names = Arrays.asList("alice", "bob", "charlie");
List<String> capitalizedNames = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
Grouping and Partitioning
Map<Boolean, List<Integer>> partitionedNumbers = numbers.stream()
.collect(Collectors.partitioningBy(n -> n > 5));
Map<Integer, List<String>> groupedByLength = names.stream()
.collect(Collectors.groupingBy(String::length));
Reduction Operations
Operation |
Method |
Description |
Sum |
reduce() |
Calculate total value |
Average |
average() |
Compute mean |
Count |
count() |
Get element count |
int sum = numbers.stream()
.reduce(0, Integer::sum);
double average = numbers.stream()
.mapToInt(Integer::intValue)
.average()
.orElse(0.0);
graph TD
A[Original Collection] --> B[Stream Creation]
B --> C[Intermediate Operations]
C --> D[Terminal Operations]
D --> E[Result Collection/Value]
Advanced Techniques
Parallel Processing
long count = numbers.parallelStream()
.filter(n -> n > 5)
.count();
Custom Collectors
List<String> result = names.stream()
.collect(Collectors.toCollection(LinkedList::new));
- Use appropriate stream operations
- Avoid unnecessary intermediate operations
- Consider parallel streams for large collections
- Profile and benchmark your code
Error Handling
Optional<Integer> maxValue = numbers.stream()
.max(Integer::compareTo);
maxValue.ifPresent(System.out::println);
Best Practices
- Prefer functional-style stream operations
- Use method references when possible
- Handle optional results
- Be mindful of performance implications
Note: LabEx encourages continuous practice to master these collection techniques.