package Ġcom . san og uer al oren zo . sample . domain . use case Ċ Ċ import Ġcom . san og uer al oren zo . sample . domain . model . Post Ċ import Ġcom . san og uer al oren zo . sample . domain . model . User Ċ import Ġcom . san og uer al oren zo . sample . domain . repository . Post Repository Ċ import Ġcom . san og uer al oren zo . sample . domain . repository . UserRepository Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . functions . Bi Function Ċ Ċ /** Ċ Ġ* ĠThe Ġstandard Ġlibrary Ġprovides ĠPair Ġand ĠTrip le . Ċ Ġ* ĠIn Ġmost Ġcases , Ġthough , Ġnamed Ġdata Ġclasses Ġare Ġa Ġbetter Ġdesign Ġchoice . Ċ Ġ* ĠThis Ġis Ġbecause Ġthey Ġmake Ġthe Ġcode Ġmore Ġreadable Ġby Ġproviding Ġmeaningful Ġnames Ġfor Ġproperties . Ċ Ġ*/ Ċ data Ġclass ĠCom bined User Post ( val Ġuser : ĠUser , Ġval Ġpost : ĠPost ) Ċ Ċ class ĠUsers Posts UseCase Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġuser Repository : ĠUser Repository , ĊĠĠĠ Ġprivate Ġval Ġpost Repository : ĠPost Repository Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġget ( refresh : ĠBoolean ): ĠSingle < List < Combined User Post >> Ġ= ĊĠĠĠĠĠĠĠ ĠSingle . zip ( user Repository . get ( refresh ), Ġpost Repository . get ( refresh ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBi Function Ġ{ Ġuser List , Ġpost List Ġ-> Ġmap ( user List , Ġpost List ) Ġ}) Ċ } Ċ Ċ class ĠUser Post UseCase Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġuser Repository : ĠUser Repository , ĊĠĠĠ Ġprivate Ġval Ġpost Repository : ĠPost Repository Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġget ( userId : ĠString , Ġpost Id : ĠString , Ġrefresh : ĠBoolean ): ĠSingle < Combined User Post > Ġ= ĊĠĠĠĠĠĠĠ ĠSingle . zip ( user Repository . get ( userId , Ġrefresh ), Ġpost Repository . get ( post Id , Ġrefresh ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBi Function Ġ{ Ġuser , Ġpost Ġ-> Ġmap ( user , Ġpost ) Ġ}) Ċ } Ċ Ċ /** Ċ Ġ* ĠTo Ġobtain Ġthe Ġuser Ġfrom Ġa Ġpost Ġwe Ġneed Ġto Ġuse Ġthe ĠuserId Ġfrom Ġthe Ġpost Ġto Ġfind Ġit Ġin Ġthe Ġuser Ġlist . Ċ Ġ* ĠThis Ġis Ġa Ġlimitation Ġthat Ġcomes Ġfrom Ġthe Ġnetwork ĠAPI Ġand Ġthis Ġspecific Ġuse Ġcase Ġrequires Ġboth Ġsample Ġand Ġusers . Ċ Ġ*/ Ċ fun Ġmap ( user : ĠUser , Ġpost : ĠPost ): ĠCom bined User Post Ġ= ĠCom bined User Post ( user , Ġpost ) Ċ Ċ fun Ġmap ( user List : ĠList < User >, Ġpost List : ĠList < Post >): ĠList < Combined User Post > Ġ= ĊĠĠĠ Ġpost List . map Ġ{ Ġpost Ġ-> ĠCom bined User Post ( user List . first Ġ{ Ġpost . userId Ġ== Ġit . id Ġ}, Ġpost ) Ġ} Ċ