package Ġio . github . to mpl um . a oc . f erry . se ating . strategy Ċ Ċ import Ġio . github . to mpl um . a oc . f erry . se ating . Se ating Layout Ċ import Ġio . github . to mpl um . libs . math . point . Point 2 D Ċ import Ġjava . util . stream . Collectors Ċ Ċ /** Ċ Ġ* ĠThe Ġrev ised Ġ[ Se ating Strategy ] Ġwith Ġthe Ġcorrect Ġad jacency Ġlogic . Ċ Ġ* Ċ Ġ* ĠThis Ġstrategy Ġcons iders Ġadjacent Ġse ats Ġto Ġbe Ġthe Ġeight Ġse ats Ġof Ġwhich Ġcan Ġbe Ġseen Ġfrom Ġthe Ġtarget Ġseat . Ċ Ġ* ĠOne Ġcannot Ġsee Ġthrough Ġempty Ġor Ġoccupied Ġse ats , Ġonly Ġfloor Ġspace . Ċ Ġ* Ġ@ see ĠPoint 2 D . adjacent Ċ Ġ* Ċ Ġ* ĠThe Ġsame Ġdefault Ġrules Ġapply Ġfrom Ġthe Ġ[ Initial Se ating Strategy ]. Ċ Ġ*/ Ċ class ĠRe vised Se ating Strategy Ġ: ĠSe ating Strategy Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Occup ied Seat Positions ( layout : ĠSe ating Layout ): ĠList < Point 2 D > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlayout . get Se ats Ġ{ Ġseat Ġ-> Ġseat . isEmpty () Ġ}. parallel Stream (). filter Ġ{ Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . getFirst Adjacent ( position ). none Ġ{ Ġseat Ġ-> Ġseat . is Occup ied () Ġ} ĊĠĠĠĠĠĠĠ Ġ}. collect ( Collectors . toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Empty Seat Positions ( layout : ĠSe ating Layout ): ĠList < Point 2 D > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlayout . get Se ats Ġ{ Ġseat Ġ-> Ġseat . is Occup ied () Ġ}. parallel Stream (). filter Ġ{ Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . getFirst Adjacent ( position ). count Ġ{ Ġseat Ġ-> Ġseat . is Occup ied () Ġ} Ġ>= Ġ 5 ĊĠĠĠĠĠĠĠ Ġ}. collect ( Collectors . toList ()) ĊĠĠĠ Ġ} Ċ }