package com.govtech.viswa.streams;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Sarav on 30 Sep 2023
* @project govtech
* @package com.govtech.viswa.streams
* @class FlatMapTest
*/
public class FlatMapTest {
public static void main(String[] args) {
List<Person> persons = Arrays.asList(
new Person(1, "John"),
new Person(2, "Jane"),
new Person(3, "Alice")
);
List<Address> addresses = Arrays.asList(
new Address(1, "123 Street"),
new Address(2, "456 Avenue"),
new Address(3, "789 Road"),
new Address(4, "321 Boulevard")
);
List<PersonWithAddress> result = persons.stream()
.flatMap(person ->
addresses.stream()
.filter(address -> address.getPersonId()
== person.getId())
.map(address -> new
PersonWithAddress(person, address))
)
.collect(Collectors.toList());
result.forEach(System.out::println);
}
}
class Person {
private int id;
private String name;
public Person(int
id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName()
{
return name;
}
}
class Address {
private int personId;
private String street;
public Address(int
personId, String street) {
this.personId = personId;
this.street = street;
}
public int getPersonId() {
return personId;
}
public String getStreet()
{
return street;
}
}
class PersonWithAddress {
private Person person;
private Address address;
public PersonWithAddress(Person person, Address address) {
this.person = person;
this.address = address;
}
public Person getPerson()
{
return person;
}
public Address getAddress() {
return address;
}
@Override
public String toString() {
return "PersonWithAddress{" +
"person="
+ person.getName() +
",
address=" + address.getStreet() +
'}';
}
}
PersonWithAddress{person=John, address=123 Street}
PersonWithAddress{person=Jane, address=456 Avenue}
PersonWithAddress{person=Alice, address=789 Road}