How flatMap works in Java 8 with Example
UPDATED: 30 September 2015
Tags:
Collection
,
List
,
Stream
,
stream-api
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)
Returns a stream consisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element. Each mapped stream is closed after its contents have been placed into this stream. (If a mapped stream is null an empty stream is used, instead.)
Source code (Company.java)
public class Company {
private Long id;
private String CompanyName;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCompanyName() {
return CompanyName;
}
public void setCompanyName(String CompanyName) {
this.CompanyName = CompanyName;
}
}
Source code (Company.java)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class FlatMapExample {
public static void main(String[] args) {
/* Create an object of `Company` and set values */
Company companyApple = new Company();
companyApple.setId(1L);
companyApple.setCompanyName("Apple");
Company companySamsung = new Company();
companySamsung.setId(2L);
companySamsung.setCompanyName("Samsung");
/**
* - Create `List` of `Company`
* - Add `companyApple` and `companySamsung` to List.
*/
List<Company> mobileCompanies= new ArrayList<>();
mobileCompanies.add(companyApple);
mobileCompanies.add(companySamsung);
/* Create an object of `Company` and set values */
Company companyFacebook = new Company();
companyFacebook.setId(3L);
companyFacebook.setCompanyName("Facebook");
Company companyTwitter = new Company();
companyTwitter.setId(4L);
companyTwitter.setCompanyName("Twitter");
/**
* - Create `List` of `Company`
* - Add `companyFacebook` and `companyTwitter` to List.
*/
List<Company> socialNetworkingCompanies = new ArrayList<>();
socialNetworkingCompanies.add(companyFacebook);
socialNetworkingCompanies.add(companyTwitter);
/* Add `List` of `Companies` to Map */
Map<String, List<Company>> companies = new HashMap<>();
companies.put("MobileCompanies", mobileCompanies);
companies.put("SocialNetworkingCompanies", socialNetworkingCompanies);
/**
* JavaDoc: `map` method
* Returns a stream consisting of the results of replacing each element of this stream with the contents of a mapped stream
* produced by applying the provided mapping function to each element. Each mapped stream is closed after its contents have
* been placed into this stream. (If a mapped stream is null an empty stream is used, instead.)
*
* Explanation: `.flatMap(key -> companies.get(key).stream())`
* In this operation we are taking `stream` of `List<Company>` from each key of `Map<String, List<Company>>`.
* That returns the `Stream` of `Company` objects from `stream` of `List<Company>`.
*/
companies.keySet()
.stream()
.flatMap(key -> companies.get(key).stream())
.forEach(com -> {
System.out.println(com.getCompanyName());
});
}
}
Explanation: .flatMap(key -> companies.get(key).stream())
In this operation we are taking stream of List<Company> from each key of Map<String, List<Company>>. That returns the Stream of Company objects from stream of List<Company>.
Output
Apple Samsung Facebook Twitter
Tags:
Collection
,
List
,
Stream
,
stream-api


0 comments :