Java - Streams
Java - Streams
Stream is a new abstract layer introduced in Java 8. Using stream, you can process data in a
declarative way similar to SQL statements. For example, consider the following SQL statement.
The above SQL expression automatically returns the maximum salaried employee's details,
without doing any computation on the developer's end. Using collections framework in Java, a
developer has to use loops and make repeated checks. Another concern is efficiency; as multi-
core processors are available at ease, a Java developer has to write parallel code processing that
can be pretty error-prone.
To resolve such issues, Java 8 introduced the concept of stream that lets the developer to
process data declaratively and leverage multicore architecture without the need to write any
specific code for it.
Pipelining − Most of the stream operations return stream itself so that their result can be
pipelined. These operations are called intermediate operations and their function is to
take input, process them, and return output to the target. collect() method is a terminal
operation which is normally present at the end of the pipelining operation to mark the end
of the stream.
Automatic iterations − Stream operations do the iterations internally over the source
elements provided, in contrast to Collections where explicit iteration is required.
forEach Method
Stream has provided a new method 'forEach' to iterate each element of the stream. The following
code segment shows how to print 10 random numbers using forEach.
map Method
The 'map' method is used to map each element to its corresponding result. The following code
segment prints unique squares of numbers using map.
filter Method
The 'filter' method is used to eliminate elements based on a criteria. The following code segment
prints a count of empty strings using filter.
limit Method
The 'limit' method is used to reduce the size of the stream. The following code segment shows
how to print 10 random numbers using limit.
sorted Method
The 'sorted' method is used to sort the stream. The following code segment shows how to print
10 random numbers in a sorted order.
Parallel Processing
parallelStream is the alternative of stream for parallel processing. Take a look at the following
code segment that prints a count of empty strings using parallelStream.
Collectors
Collectors are used to combine the result of processing on the elements of a stream. Collectors
can be used to return a list or a string.
Statistics
With Java 8, statistics collectors are introduced to calculate all statistics when stream
processing is being done.
Java8Tester.java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.Map;
count = strings.stream().filter(string->string.isEmpty()).count(
System.out.println("Empty Strings: " + count);
random.ints().limit(10).sorted().forEach(System.out::println);
//parallel processing
count = strings.parallelStream().filter(string -> string.isEmpty
System.out.println("Empty Strings: " + count);
}
if(string.isEmpty()) {
count++;
}
}
return count;
}
if(string.length() == 3) {
count++;
}
}
return count;
}
private static List<String> deleteEmptyStringsUsingJava7(List<String
List<String> filteredList = new ArrayList<String>();
if(!string.isEmpty()) {
filteredList.add(string);
}
}
return filteredList;
}
if(!string.isEmpty()) {
stringBuilder.append(string);
stringBuilder.append(separator);
}
}
String mergedString = stringBuilder.toString();
return mergedString.substring(0, mergedString.length()-2);
}
if(!squaresList.contains(square)) {
squaresList.add(square);
}
}
return squaresList;
}
C:\JAVA>java Java8Tester
Using Java 7:
List: [abc, , bc, efg, abcd, , jkl]
Empty Strings: 2
Strings of length 3: 3
Filtered List: [abc, bc, efg, abcd, jkl]
Merged String: abc, bc, efg, abcd, jkl
Squares List: [9, 4, 49, 25]
List: [1, 2, 13, 4, 15, 6, 17, 8, 19]
Highest number in List : 19
Lowest number in List : 1
Sum of all numbers : 85
Average of all numbers : 9
Random Numbers:
-1279735475
903418352
-1133928044
-1571118911
628530462
18407523
-881538250
-718932165
270259229
421676854
Using Java 8:
List: [abc, , bc, efg, abcd, , jkl]
Empty Strings: 2
Strings of length 3: 3
Filtered List: [abc, bc, efg, abcd, jkl]
Merged String: abc, bc, efg, abcd, jkl
Squares List: [9, 4, 49, 25]
List: [1, 2, 13, 4, 15, 6, 17, 8, 19]
Highest number in List : 19
Lowest number in List : 1
Sum of all numbers : 85
Average of all numbers : 9.444444444444445
Random Numbers:
-1009474951
-551240647
-2484714
181614550
933444268
1227850416
1579250773
1627454872
1683033687
1798939493
Empty Strings: 2