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}