Practical Stream Examples
Real-World Array Merging Scenarios
1. Merging User Data Arrays
public class User {
private String name;
private int age;
// Constructor, getters, setters
}
User[] activeUsers = {...};
User[] inactiveUsers = {...};
User[] allUsers = Stream.concat(Arrays.stream(activeUsers), Arrays.stream(inactiveUsers))
.toArray(User[]::new);
2. Combining Numeric Data
Integer[] positiveNumbers = {1, 2, 3};
Integer[] negativeNumbers = {-1, -2, -3};
Integer[] combinedNumbers = Stream.concat(Arrays.stream(positiveNumbers), Arrays.stream(negativeNumbers))
.sorted()
.toArray(Integer[]::new);
Stream Processing Patterns
Filtering During Merging
String[] fruits1 = {"apple", "banana", "cherry"};
String[] fruits2 = {"date", "elderberry", "fig"};
String[] largeFruits = Stream.concat(Arrays.stream(fruits1), Arrays.stream(fruits2))
.filter(fruit -> fruit.length() > 5)
.toArray(String[]::new);
Complex Merging Strategies
Integer[] group1 = {1, 2, 3};
Integer[] group2 = {4, 5, 6};
Integer[] processedArray = Stream.concat(Arrays.stream(group1), Arrays.stream(group2))
.map(num -> num * 2)
.toArray(Integer[]::new);
Stream Processing Flow
graph LR
A[Source Arrays] --> B[Merge]
B --> C[Filter]
C --> D[Transform]
D --> E[Collect/Array]
| Operation |
Complexity |
Memory Usage |
| Simple Merge |
O(n) |
Moderate |
| Merge with Filtering |
O(n) |
Low |
| Merge with Transformation |
O(n) |
Moderate |
Advanced Merging Techniques
Parallel Stream Processing
Integer[] data1 = {1, 2, 3};
Integer[] data2 = {4, 5, 6};
Integer[] processedData = Stream.concat(Arrays.stream(data1), Arrays.stream(data2))
.parallel()
.map(num -> num * num)
.toArray(Integer[]::new);
LabEx Recommendation
At LabEx, we emphasize understanding stream processing as a powerful paradigm for efficient data manipulation.
Best Practices
- Use appropriate stream operations
- Consider performance for large datasets
- Leverage parallel streams when possible
- Choose method based on specific use case