parallel streams in java
Posted By : Mohit Gupta | 30-Jun-2021
Java Parallel Stream
* Java parallel streams are a feature of java 8, it means utilizing multiple cores of the processor.
*Normally any java code has one stream of processing, where it is executed sequentially .where as by using parallel streams, we can divide the code into multiple streams that are executed in parallel on separate cores and the final result is the combination of the individual outcomes
*However, the order of execution is not under our control.
sequential vs parallel stream execution
sequential->The task will use multiple threads but in work on a single core
parallel steam execution-> The task will use multiple threads but in work on multiple cores
Example of parallel stream
public class ParallelStreamExample {
public static void main(String[] args) {
long start=0;
long end=0;
start=System.currentTimeMillis();
IntStream.range(1,100).forEach(System.out::println);
end=System.currentTimeMillis();
System.out.println("Plain stream took time : "+(end-start));
System.out.println("============================================");
start=System.currentTimeMillis();
IntStream.range(1,100).parallel().forEach(System.out::println);
end=System.currentTimeMillis();
System.out.println("Parallel stream took time : "+(end-start));
IntStream.range(1,10).forEach(x->{
System.out.println("Thread : "+Thread.currentThread().getName()+" : "+x);
});
IntStream.range(1,10).parallel().forEach(x->{
System.out.println("Thread : "+Thread.currentThread().getName()+" : "+x);
});
List<Employee> employees = EmployeeDatabase.getEmployees();
//normal
start=System.currentTimeMillis();
double salaryWithStream = employees.stream()
.map(Employee::getSalary).mapToDouble(i -> i).average().getAsDouble();
end=System.currentTimeMillis();
System.out.println("Normal stream execution time : "+(end-start)+" : Avg salary : "+salaryWithStream);
start=System.currentTimeMillis();
double salaryWithParallelStream = employees.parallelStream()
.map(Employee::getSalary).mapToDouble(i -> i).average().getAsDouble();
end=System.currentTimeMillis();
System.out.println("Parallel stream execution time : "+(end-start)+" : Avg salary : "+salaryWithParallelStream);
}
}
Optional
Java 8 has introduced a new class Optional in java.util package. Without using too many null checks, it can help in writing a neat code. By using Optional.
some examples of optional interface ->
1 step ->create a class customer
public class Customer {
private int id;
private String name;
private String email;
private List<String> phoneNumbers;
public Customer() {
}
public Customer(int id, String name, String email, List<String> phoneNumbers) {
this.id = id;
this.name = name;
this.email = email;
this.phoneNumbers = phoneNumbers;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Optional<String> getEmail() {
return Optional.ofNullable(email);
}
public void setEmail(String email) {
this.email = email;
}
public List<String> getPhoneNumbers() {
return phoneNumbers;
}
public void setPhoneNumbers(List<String> phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
2 . step ->create a database Ekart Database
public class EkartDataBase {
public static List<Customer> getAll() {
return Stream.of(
new Customer(101, "john", "[email protected]", Arrays.asList("397937955", "21654725")),
new Customer(102, "smith", "[email protected]", Arrays.asList("89563865", "2487238947")),
new Customer(103, "peter", "[email protected]", Arrays.asList("38946328654", "3286487236")),
new Customer(104, "kely", "[email protected]", Arrays.asList("389246829364", "948609467"))
).collect(Collectors.toList());
}
3 step ->create an OptionalDemo class
public class OptionalDemo {
public static Customer getCustomerByEmailId(String email) throws Exception {
List<Customer> customers = EkartDataBase.getAll();
return customers.stream()
.filter(customer -> customer.getEmail().equals(email))
.findAny().orElseThrow(()->new Exception("no customer present with this email id"));
}
public static void main(String[] args) throws Exception {
Customer customer=new Customer(101, "john", "[email protected]", Arrays.asList("397937955", "21654725"));
//empty
//of
//ofNullable
Optional<Object> emptyOptional = Optional.empty();
System.out.println(emptyOptional);
//Optional<String> emailOptional = Optional.of(customer.getEmail());
//System.out.println(emailOptional);
Optional<String> emailOptional2 = Optional.ofNullable(customer.getEmail());
/* if(emailOptional2.isPresent()){
System.out.println(emailOptional2.get());
}*/
// System.out.println(emailOptional2.orElse("[email protected]"));
// System.out.println(emailOptional2.orElseThrow(()->new IllegalArgumentException("email not present")));
System.out.println(emailOptional2.map(String::toUpperCase).orElseGet(()->"default email..."));
getCustomerByEmailId("pqr");
}
Cookies are important to the proper functioning of a site. To improve your experience, we use cookies to remember log-in details and provide secure log-in, collect statistics to optimize site functionality, and deliver content tailored to your interests. Click Agree and Proceed to accept cookies and go directly to the site or click on View Cookie Settings to see detailed descriptions of the types of cookies and choose whether to accept certain cookies while on the site.
About Author
Mohit Gupta
Mohit Gupta is working as a Developer, having good knowledge of core java. he is good in behaviour and and prefers to complete assigned tasks on time.