Specialized Streams
IntStream |
|
DoubleStream |
|
LongStream |
|
It has better performance to use these specialized streams when using numeric data types, because there is no boxing/unboxing
Suppress elements
limit |
.limit(5)
will limit the result to the first 5 elements |
skip |
.skip(5)
will skip the first 5 elements |
filter |
.filter(e -> e.getSalary() > 200000)
will keep the elements that satisfy the given predicate. In this case, all elements that have salary above 200000 |
Comparing elements
distinct |
.distinct() will compare the elements in the stream using equals() and eliminate duplicates |
sorted |
.sorted((e1, e2) -> e1.getName().compareTo(e2.getName())) will sort the elements with the given comparator. Elements must be Comparable. |
min |
Similar to sorted, but it will find the min element according to the given comparator |
max |
Similar to sorted, but it will find the max element according to the given comparator |
Apply a function to each element
map |
.map(employeeRepository::findById)
will apply the given function and substitute the elements in the stream for new elements. In this case, it received a stream of employee IDs and returned a stream of Employee objects |
mapToDouble mapToInt mapToLong |
similar to map, but the function converts the element to the specified primitive type, resulting in a specialized stream IntStream, DoubleStream or LongStream |
flatMap |
similar to map, but the number of elements resulting may be different. It's normally used to convert a List of List into a single list with all the elements |
peek |
.peek(e -> e.salaryIncrement(10.0)) will apply the give function to all elements in the list, but doesn't substitute the elements in the list |
|
|
Reduce elements to single value
reduce |
.reduce(0.0, Double::sum) will return a single value. It starts with the identity value (0.0) and applies the given function to each element in the array. In this case it's summing all elements, one by one |
allMatch |
.allMatch(i -> i % 2 == 0); will check if all elements match the given condition. If so, returns true, else returns false |
anyMatch |
.anyMatch(i -> i % 2 == 0); will check if one of the elements match the given condition. If so, returns true, else returns false |
noneMatch |
.noneMatch(i -> i % 2 == 0); will check if no elements match the given condition. If so, returns true, else returns false |
findFirst |
.findFirst() will return an Optional with the first element in the stream |
forEach |
forEach(e -> e.salaryIncrement(10.0)) will apply the given function to each element in the stream, but it's a terminal operation and returns void |
count |
.count() outputs the number of elements in the stream |
Collect elements
toList |
collect(Collectors.toList()) gather all elements in the stream into a List |
toSet |
collect(Collectors.toSet()) gather all elements in the stream into a Set |
toCollection |
collect(Collectors.toCollection(Vector::new)) gather all elements in the list in an arbitrary Collection |
joining |
collect(Collectors.joining(", ")).toString() will join String elements with the given separator and return the aggregated String |
summarizingDouble |
summaryStatistics |
partitioningBy |
.collect(Collectors.partitioningBy(s -> s.getGrade() >= PASS_THRESHOLD)) will partition the data into 2 categories based on the given condition. The result will be a Map<Boolean, List<Student>> |
groupingBy |
.collect(Collectors.groupingBy(Employee::getDepartment)); will group the elements into categories based on the function. The result will be a Map<Department, List<Employee>> |
mapping |
mapping(Person::getLastName, toSet()) it receives a function to be applied to all elements and way of collecting downstream the elements. In this case, it will get the last name of all persons and add them to a set |
reducing |
|
Created By
Metadata
Favourited By
Comments
No comments yet. Add yours below!
Add a Comment
Related Cheat Sheets