package Ġdev . atomic repos . kotlin . m fr Ċ Ċ import Ġjava . time .* Ċ import Ġjava . time . temporal . Ch rono Unit Ċ Ċ data Ġclass ĠEmployee ( ĊĠĠĠ Ġval ĠfirstName : ĠString , ĊĠĠĠ Ġval ĠlastName : ĠString , ĊĠĠĠ Ġval Ġjob Title : ĠJob Title , ĊĠĠĠ Ġval ĠstartDate : ĠLocalDate , ĊĠĠĠ Ġval Ġseparation Date : ĠLocalDate ? Ġ= Ġnull Ċ ) Ċ Ċ enum Ġclass ĠJob Title Ġ{ ĊĠĠĠ ĠMAN AGER , ĠSOFTWARE _ ENGINE ER , ĠDI STRICT _ MANAGER , ĠDB A , ĠWEB _ DE VELO PER Ċ } Ċ Ċ fun ĠfindBy LastName Like ( match : ĠString ) Ġ= ĊĠĠĠ Ġemployees . filter Ġ{ Ġit . lastName . contains ( match ) Ġ} Ċ Ċ fun ĠfindBy Position ( match : ĠJob Title ) Ġ= ĊĠĠĠ Ġemployees . filter Ġ{ Ġit . job Title Ġ== Ġmatch Ġ} Ċ Ċ fun Ġfind Terminated Since ( match : ĠLocalDate ) Ġ= ĊĠĠĠ Ġemployees . filter Ġ{ Ġit . separ ation Date ?. is After ( match ) Ġ?: Ġfalse Ġ} Ċ Ċ fun Ġget Average Service Time () Ġ= ĊĠĠĠ Ġemployees ĊĠĠĠĠĠĠĠ Ġ. map ( Employee :: startDate ) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . until ( date Of Test , ĠCh rono Unit . DAYS ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. average () Ċ Ċ fun Ġget Average Service Time By Job Title ( match : ĠJob Title ) Ġ= ĊĠĠĠ Ġemployees . filter Ġ{ Ġit . job Title Ġ== Ġmatch Ġ} ĊĠĠĠĠĠĠĠ Ġ. map ( Employee :: startDate ) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . until ( date Of Test , ĠCh rono Unit . DAYS ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. average () Ċ Ċ /** Ċ Ġ* ĠFixed ĠDate Ġof ĠMarch Ġ 1 5 , Ġ 2 0 2 2 . ĠUsed Ġfor Ġdate - based Ġmath . Ċ Ġ*/ Ċ val Ġdate Of Test : ĠLocalDate Ġ= ĊĠĠĠ ĠLocalDate . of Instant ( ĊĠĠĠĠĠĠĠ ĠClock . fixed ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . parse (" 2 0 2 2 - 0 3 - 1 5 T 0 0 : 0 0 : 0 0 . 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZone Id . of (" America / Ch icago ") ĊĠĠĠĠĠĠĠ Ġ). instant (), ĊĠĠĠĠĠĠĠ ĠZone Id . of (" America / Ch icago ") ĊĠĠĠ Ġ) Ċ Ċ val Ġemployees Ġ= ĠlistOf ( ĊĠĠĠ ĠEmployee ( ĊĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġ" Mat t ", ĊĠĠĠĠĠĠĠ ĠlastName Ġ= Ġ" St ine ", ĊĠĠĠĠĠĠĠ Ġjob Title Ġ= ĠJob Title . SOFTWARE _ ENGINE ER , ĊĠĠĠĠĠĠĠ ĠstartDate Ġ= ĠLocalDate . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 0 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMonth . J AN U ARY , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĊĠĠĠĠĠĠĠ Ġ) Ġ// Ġ 7 7 3 1 Ġdays Ġof Ġservice ĊĠĠĠ Ġ), ĊĠĠĠ ĠEmployee ( ĊĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġ" P eter ", ĊĠĠĠĠĠĠĠ ĠlastName Ġ= Ġ" G ibb ons ", ĊĠĠĠĠĠĠĠ Ġjob Title Ġ= ĠJob Title . MANAGER , ĊĠĠĠĠĠĠĠ ĠstartDate Ġ= ĠLocalDate . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 9 9 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMonth . SEP TE MBER , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 5 ĊĠĠĠĠĠĠĠ Ġ) Ġ// Ġ 9 6 7 7 Ġdays Ġof Ġservice ĊĠĠĠ Ġ), ĊĠĠĠ ĠEmployee ( ĊĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġ" Michael ", ĊĠĠĠĠĠĠĠ ĠlastName Ġ= Ġ" B ol ton ", ĊĠĠĠĠĠĠĠ Ġjob Title Ġ= ĠJob Title . WEB _ DE VELO PER , ĊĠĠĠĠĠĠĠ ĠstartDate Ġ= ĠLocalDate . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 9 9 9 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMonth . FE BR U ARY , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 9 ĊĠĠĠĠĠĠĠ Ġ), Ġ// Ġ 8 4 2 4 Ġdays Ġof Ġservice ĊĠĠĠĠĠĠĠ Ġseparation Date Ġ= ĠLocalDate . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 2 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMonth . J AN U ARY , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 5 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ), ĊĠĠĠ ĠEmployee ( ĊĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġ" Sam ir ", ĊĠĠĠĠĠĠĠ ĠlastName Ġ= Ġ" N ag he en an ajar ", ĊĠĠĠĠĠĠĠ Ġjob Title Ġ= ĠJob Title . WEB _ DE VELO PER , ĊĠĠĠĠĠĠĠ ĠstartDate Ġ= ĠLocalDate . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 9 9 9 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMonth . FE BR U ARY , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 9 ĊĠĠĠĠĠĠĠ Ġ), Ġ// Ġ 8 4 2 4 Ġdays Ġof Ġservice ĊĠĠĠĠĠĠĠ Ġseparation Date Ġ= ĠLocalDate . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 2 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMonth . J AN U ARY , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 5 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ), ĊĠĠĠ ĠEmployee ( ĊĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġ" Bill ", ĊĠĠĠĠĠĠĠ ĠlastName Ġ= Ġ" L umber gh ", ĊĠĠĠĠĠĠĠ Ġjob Title Ġ= ĠJob Title . DI STRICT _ MANAGER , ĊĠĠĠĠĠĠĠ ĠstartDate Ġ= ĠLocalDate . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 9 7 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMonth . AP R IL , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠ Ġ) Ġ// Ġ 1 7 1 4 6 Ġdays Ġof Ġservice ĊĠĠĠ Ġ) Ċ ) Ċ