Stream Processing
Stream Processing Workflow
graph LR
A[Source] --> B[Intermediate Operations]
B --> C[Terminal Operation]
C --> D[Result]
Filtering Elements
Basic Filtering
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());
// Result: [2, 4, 6, 8, 10]
Complex Filtering
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> longNames = names.stream()
.filter(name -> name.length() > 4)
.collect(Collectors.toList());
// Result: ["Alice", "Charlie"]
Mapping Operations
List<String> names = Arrays.asList("alice", "bob", "charlie");
List<String> capitalizedNames = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
// Result: ["ALICE", "BOB", "CHARLIE"]
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> squaredNumbers = numbers.stream()
.map(n -> n * n)
.collect(Collectors.toList());
// Result: [1, 4, 9, 16, 25]
Reducing Stream Elements
Basic Reduction
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.reduce(0, (a, b) -> a + b);
// Result: 15
Grouping and Collecting
Group By Operation
List<String> fruits = Arrays.asList("apple", "banana", "cherry", "date");
Map<Integer, List<String>> groupedByLength = fruits.stream()
.collect(Collectors.groupingBy(String::length));
// Result: {5=[apple], 6=[banana], 6=[cherry], 4=[date]}
Stream Processing Techniques
Technique |
Description |
Example |
Filtering |
Select elements |
filter() |
Mapping |
Transform elements |
map() |
Reducing |
Aggregate elements |
reduce() |
Sorting |
Order elements |
sorted() |
Advanced Processing
Parallel Stream Processing
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int parallelSum = numbers.parallelStream()
.mapToInt(Integer::intValue)
.sum();
// Faster processing for large collections
Best Practices
- Use intermediate operations lazily
- Avoid multiple terminal operations
- Choose appropriate stream methods
- Consider performance for large datasets
Explore stream processing techniques with LabEx to enhance your Java programming skills and write more efficient code.