@ file : Suppress (" Remove Explicit Type Arguments ") Ċ Ċ // Ġthe Ġcompiler Ġsometimes Ġneeds Ġmore Ġinformation Ġabout Ġthe Ġtypes Ċ Ċ package Ġpw . for st . kat lib Ċ Ċ import Ġkotlin . random . Random ĊĊ Ċ /** Ċ Ġ* ĠRandom ly Ġselects Ġitem Ġwith Ġrespect Ġto Ġthe Ġcurrent Ġweight Ġdistribution . Ċ Ġ*/ Ċ fun Ġ< T > ĠMap < T , ĠDouble >. get Weighted Random ( rand : ĠRandom ): ĠT Ġ{ ĊĠĠĠ Ġval Ġtotal Ġ= Ġthis . values . sum () ĊĠĠĠ Ġreturn Ġif Ġ( total Ġ== Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . keys . getRandom Element ( rand ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġrand . next Double () Ġ* Ġtotal ĊĠĠĠĠĠĠĠ Ġvar Ġcount Weight Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( item , Ġweight ) Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Weight Ġ+= Ġweight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Weight Ġ> Ġr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . keys . last () ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* ĠRandom ly Ġsorts Ġthe Ġitems Ġwith Ġrespect Ġto Ġthe Ġcurrent Ġweight Ġdistribution . Ċ Ġ* Ġ[ normal izer ] Ġis Ġused Ġto Ġnormalize Ġthe Ġrandom Ġvalue Ġobtained Ġfrom Ġ[ rand ] Ġto Ġcontrol Ċ Ġ* Ġhow Ġimportant Ġthe Ġoriginal Ġweights Ġare . ĠWith Ġhigher Ġ[ normal izer ] Ġthe Ġimportance Ġof Ġthe Ġrandom Ġfactor Ġde creases . Ċ Ġ*/ Ċ fun Ġ< T > ĠMap < T , ĠDouble >. get Keys In Weighted Random Order ( normal izer : ĠDouble , Ġrand : ĠRandom ): ĠList < T > Ġ{ ĊĠĠĠ Ġreturn Ġthis . map Values Ġ{ Ġ( rand . next Double () Ġ+ Ġnormal izer ) Ġ* Ġit . value Ġ}. entries . sorted By Descending Ġ{ Ġit . value Ġ}. map Ġ{ Ġit . key Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠMerge s Ġtwo Ġmaps Ġtogether Ġusing Ġthe Ġgiven Ġ[ reduce ] Ġfunction . Ċ Ġ* ĠBy Ġdefault , Ġthe Ġreduce Ġfunction Ġkeeps Ġthe Ġvalue Ġfrom Ġ[ this ] Ġmap . Ċ Ġ*/ Ċ inline Ġfun Ġ< K , ĠV > ĠMap < K , ĠV >. merge Reduce ( other : ĠMap < K , ĠV >, Ġreduce : Ġ( V , ĠV ) Ġ-> ĠV Ġ= Ġ{ Ġa , Ġ_ Ġ-> Ġa Ġ}): ĠMap < K , ĠV > Ġ{ ĊĠĠĠ Ġreturn Ġmerge Reduce To ( Linked HashMap ( this . size Ġ+ Ġother . size ), Ġother , Ġreduce ) Ċ } Ċ Ċ /** Ċ Ġ* ĠMerge s Ġtwo Ġmaps Ġtogether Ġusing Ġthe Ġgiven Ġ[ reduce ] Ġfunction Ġinto Ġthe Ġgiven Ġ[ destination ]. Ċ Ġ* ĠBy Ġdefault , Ġthe Ġreduce Ġfunction Ġkeeps Ġthe Ġvalue Ġfrom Ġ[ this ] Ġmap . Ċ Ġ*/ Ċ inline Ġfun Ġ< K , ĠV , ĠM Ġ: ĠMutable Map < K , ĠV >> ĠMap < K , ĠV >. merge Reduce To ( destination : ĠM , Ġother : ĠMap < K , ĠV >, Ġreduce : Ġ( V , ĠV ) Ġ-> ĠV Ġ= Ġ{ Ġa , Ġ_ Ġ-> Ġa Ġ}): ĠM Ġ{ ĊĠĠĠ Ġdestination . put All ( this ) ĊĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġother ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdestination [ key ] Ġ= Ġdestination [ key ]?. let Ġ{ Ġreduce ( it , Ġvalue ) Ġ} Ġ?: Ġvalue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ /** Ċ Ġ* ĠJoin s Ġtwo Ġmaps Ġtogether Ġusing Ġthe Ġgiven Ġ[ join ] Ġfunction . Ċ Ġ*/ Ċ inline Ġfun Ġ< K , ĠV 1 , ĠV 2 , ĠVR > ĠMap < K , ĠV 1 >. join ( other : ĠMap < K , ĠV 2 >, Ġjoin : Ġ( V 1 ?, ĠV 2 ?) Ġ-> ĠVR ): ĠMap < K , ĠVR > Ġ{ ĊĠĠĠ Ġreturn Ġjoin To ( Linked HashMap ( this . size Ġ+ Ġother . size ), Ġother , Ġjoin ) Ċ } Ċ Ċ /** Ċ Ġ* ĠJoin s Ġtwo Ġmaps Ġtogether Ġusing Ġthe Ġgiven Ġ[ join ] Ġfunction Ġinto Ġthe Ġgiven Ġ[ destination ]. Ċ Ġ*/ Ċ inline Ġfun Ġ< K , ĠV 1 , ĠV 2 , ĠVR , ĠM Ġ: ĠMutable Map < K , ĠVR >> ĠMap < K , ĠV 1 >. join To ( destination : ĠM , Ġother : ĠMap < K , ĠV 2 >, Ġjoin : Ġ( V 1 ?, ĠV 2 ?) Ġ-> ĠVR ): ĠM Ġ{ ĊĠĠĠ Ġval Ġkeys Ġ= Ġthis . keys Ġ+ Ġother . keys ĊĠĠĠ Ġfor Ġ( key Ġin Ġkeys ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdestination [ key ] Ġ= Ġjoin ( this [ key ], Ġother [ key ]) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ /** Ċ Ġ* ĠSw aps Ġdimensions Ġin Ġtwo - dimensional Ġmap . ĠThe Ġreturned Ġmap Ġhas Ġkeys Ġfrom Ġthe Ġsecond Ġdimension Ġas Ġprimary Ġkeys Ċ Ġ* Ġand Ġprimary Ġkeys Ġare Ġused Ġin Ġthe Ġsecond Ġdimension . Ċ Ġ*/ Ċ fun Ġ< K 1 , ĠK 2 , ĠV > ĠMap < K 1 , ĠMap < K 2 , ĠV >> . swap Keys (): ĠMap < K 2 , ĠMap < K 1 , ĠV >> Ġ= Ġswap Keys To ( Linked HashMap ()) Ġ{ ĠLinkedHashMap < K 1 , ĠV >() Ġ} Ċ Ċ /** Ċ Ġ* ĠSw aps Ġdimensions Ġin Ġtwo - dimensional Ġmap . ĠThe Ġreturned Ġmap Ġhas Ġkeys Ġfrom Ġthe Ġsecond Ġdimension Ġas Ġprimary Ġkeys Ċ Ġ* Ġand Ġprimary Ġkeys Ġare Ġstored Ġin Ġthe Ġsecond Ġdimension . Ġ[ top Destination ] Ġspecifies Ġwhich Ġmap Ġshould Ġbe Ġused Ġto Ġstore Ġthe Ġnew Ġprimary Ġkeys Ċ Ġ* Ġand Ġ[ bottom Destination ] Ġis Ġused Ġto Ġstore Ġthe Ġnew Ġsecondary Ġkeys . Ċ Ġ*/ Ċ inline Ġfun Ġ< K 1 , ĠK 2 , ĠV , ĠM 2 Ġ: ĠMutable Map < K 1 , ĠV >, ĠM 1 Ġ: ĠMutable Map < K 2 , ĠM 2 >> ĠMap < K 1 , ĠMap < K 2 , ĠV >> . swap Keys To ( ĊĠĠĠ Ġtop Destination : ĠM 1 , ĊĠĠĠ Ġbottom Destination : Ġ() Ġ-> ĠM 2 Ċ ): ĠM 1 Ġ{ ĊĠĠĠ Ġfor Ġ(( key 1 , Ġmap ) Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ(( key 2 , Ġvalue ) Ġin Ġmap ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Destination . get Or Put ( key 2 , Ġbottom Destination )[ key 1 ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtop Destination Ċ } Ċ Ċ /** Ċ Ġ* ĠWorks Ġsimilar ly Ġas Ġ[ swap Keys ] Ġbut Ġthe Ġfinal Ġmap Ġhas Ġthree Ġlevels . Ċ Ġ* Ġ[ transform ] Ġspecifies Ġhow Ġthe Ġkeys Ġshould Ġbe Ġsw apped Ġ( or Ġmodified ) Ġin Ġthe Ġnewly Ġcreated Ċ Ġ* Ġmap . Ċ Ġ*/ Ċ inline Ġfun Ġ< K 1 , ĠK 2 , ĠK 3 , ĠK R 1 , ĠK R 2 , ĠK R 3 , ĠV > ĠMap < K 1 , ĠMap < K 2 , ĠMap < K 3 , ĠV >> >. swap Keys ( transform : Ġ( K 1 , ĠK 2 , ĠK 3 ) Ġ-> ĠTrip le < KR 1 , ĠK R 2 , ĠK R 3 >): ĊĠĠĠĠĠĠĠ ĠMap < KR 1 , ĠMap < KR 2 , ĠMap < KR 3 , ĠV >>> Ġ= ĊĠĠĠ Ġthis . swap Keys To ( Linked HashMap (), Ġ{ ĠLinkedHashMap < KR 2 , ĠMutable Map < KR 3 , ĠV >>() Ġ}, Ġ{ ĠLinkedHashMap () Ġ}, Ġtransform ) Ċ Ċ /** Ċ Ġ* ĠWorks Ġsimilar ly Ġas Ġ[ swap Keys ] Ġbut Ġthe Ġfinal Ġmap Ġhas Ġthree Ġlevels . Ċ Ġ* Ġ[ transform ] Ġspecifies Ġhow Ġthe Ġkeys Ġshould Ġbe Ġsw apped Ġ( or Ġmodified ) Ġin Ġthe Ġnewly Ġcreated Ċ Ġ* Ġmap . Ġ[ top Destination ] Ġspecifies Ġwhich Ġmap Ġshould Ġbe Ġused Ġto Ġstore Ġthe Ġnew Ġprimary Ġkeys , Ċ Ġ* Ġ[ middle Destination ] Ġis Ġused Ġto Ġstore Ġthe Ġnew Ġsecondary Ġkeys Ġand Ċ Ġ* Ġ[ bottom Destination ] Ġis Ġused Ġto Ġstore Ġthe Ġnew Ġt ert i ary Ġkeys . Ċ Ġ*/ Ċ inline Ġfun Ġ< K 1 , ĠK 2 , ĠK 3 , ĠK R 1 , ĠK R 2 , ĠK R 3 , ĠV , ĠM 3 Ġ: ĠMutable Map < KR 3 , ĠV >, ĠM 2 Ġ: ĠMutable Map < KR 2 , ĠM 3 >, ĠM 1 Ġ: ĠMutable Map < KR 1 , ĠM 2 >> ĊĠĠĠĠĠĠĠ ĠMap < K 1 , ĠMap < K 2 , ĠMap < K 3 , ĠV >> >. swap Keys To ( ĊĠĠĠ Ġtop Destination : ĠM 1 , ĊĠĠĠ Ġmiddle Destination : Ġ() Ġ-> ĠM 2 , ĊĠĠĠ Ġbottom Destination : Ġ() Ġ-> ĠM 3 , ĊĠĠĠ Ġtransform : Ġ( K 1 , ĠK 2 , ĠK 3 ) Ġ-> ĠTrip le < KR 1 , ĠK R 2 , ĠK R 3 > Ċ ): ĠM 1 Ġ{ ĊĠĠĠ Ġfor Ġ(( key 1 , Ġmap 2 ) Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ(( key 2 , Ġmap 3 ) Ġin Ġmap 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( key 3 , Ġvalue ) Ġin Ġmap 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( kr 1 , Ġkr 2 , Ġkr 3 ) Ġ= Ġtransform ( key 1 , Ġkey 2 , Ġkey 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Destination . get Or Put ( kr 1 , Ġmiddle Destination ). get Or Put ( kr 2 , Ġbottom Destination )[ kr 3 ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtop Destination Ċ } Ċ Ċ /** Ċ Ġ* ĠTrans forms Ġmap Ġof Ġpairs Ġas Ġa Ġkeys Ġinto Ġtwo - dimensional Ġmap Ġwhere Ġthe Ġfirst Ġelements Ġin Ġthe Ġpair Ġare Ġused Ġas Ġprimary Ġkeys Ċ Ġ* Ġand Ġsecond Ġelements Ġas Ġsecondary Ġkeys . Ċ Ġ*/ Ċ fun Ġ< K 1 , ĠK 2 , ĠV > ĠMap < Pair < K 1 , ĠK 2 >, ĠV >. to Two Level Map (): ĠMap < K 1 , ĠMap < K 2 , ĠV >> Ġ= Ġto Two Level Map ( Linked HashMap ()) Ġ{ ĠLinkedHashMap < K 2 , ĠV >() Ġ} Ċ Ċ /** Ċ Ġ* ĠTrans forms Ġmap Ġof Ġpairs Ġas Ġa Ġkeys Ġinto Ġtwo - dimensional Ġmap Ġwhere Ġthe Ġfirst Ġelements Ġin Ġthe Ġpair Ġare Ġused Ġas Ġprimary Ġkeys Ċ Ġ* Ġand Ġsecond Ġelements Ġas Ġsecondary Ġkeys . Ġ[ top Destination ] Ġspecifies Ġwhich Ġmap Ġshould Ġbe Ġused Ġto Ġstore Ġthe Ġnew Ġprimary Ġkeys Ġand Ċ Ġ* Ġ[ bottom Destination ] Ġis Ġused Ġto Ġstore Ġthe Ġnew Ġsecondary Ġkeys . Ċ Ġ*/ Ċ inline Ġfun Ġ< K 1 , ĠK 2 , ĠV , ĠM 2 Ġ: ĠMutable Map < K 2 , ĠV >, ĠM 1 Ġ: ĠMutable Map < K 1 , ĠM 2 >> ĠMap < Pair < K 1 , ĠK 2 >, ĠV >. to Two Level Map ( ĊĠĠĠ Ġtop Destination : ĠM 1 , ĊĠĠĠ Ġbottom Destination : Ġ() Ġ-> ĠM 2 Ċ ): ĠM 1 Ġ{ ĊĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( key 1 , Ġkey 2 ) Ġ= Ġkey ĊĠĠĠĠĠĠĠ Ġtop Destination . get Or Put ( key 1 , Ġbottom Destination )[ key 2 ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtop Destination Ċ } Ċ Ċ /** Ċ Ġ* ĠTrans forms Ġlist Ġof Ġpairs , Ġwhere Ġthe Ġfirst Ġelement Ġconsists Ġof Ġpairs Ġinto Ġtwo - dimensional Ġmap Ġwhere Ġthe Ġfirst Ġelements Ċ Ġ* Ġfrom Ġthe Ġinner Ġpair Ġare Ġused Ġas Ġprimary Ġkeys Ġand Ġsecond Ġelements Ġas Ġsecondary Ġkeys . Ċ Ġ*/ Ċ fun Ġ< K 1 , ĠK 2 , ĠV > ĠList < Pair < Pair < K 1 , ĠK 2 >, ĠV >> . to Two Level Map (): ĠMap < K 1 , ĠMap < K 2 , ĠV >> Ġ= Ġto Two Level Map ( Linked HashMap ()) Ġ{ ĠLinkedHashMap < K 2 , ĠV >() Ġ} Ċ Ċ /** Ċ Ġ* ĠTrans forms Ġlist Ġof Ġpairs , Ġwhere Ġthe Ġfirst Ġelement Ġconsists Ġof Ġpairs Ġinto Ġtwo - dimensional Ġmap Ġwhere Ġthe Ġfirst Ġelements Ċ Ġ* Ġfrom Ġthe Ġinner Ġpair Ġare Ġused Ġas Ġprimary Ġkeys Ġand Ġsecond Ġelements Ġas Ġsecondary Ġkeys . Ċ Ġ* Ġ[ top Destination ] Ġspecifies Ġwhich Ġmap Ġshould Ġbe Ġused Ġto Ġstore Ġthe Ġnew Ġprimary Ġkeys Ġand Ġ[ bottom Destination ] Ġis Ġused Ġto Ġstore Ġthe Ġnew Ċ Ġ* Ġsecondary Ġkeys . Ċ Ġ*/ Ċ inline Ġfun Ġ< K 1 , ĠK 2 , ĠV , ĠM 2 Ġ: ĠMutable Map < K 2 , ĠV >, ĠM 1 Ġ: ĠMutable Map < K 1 , ĠM 2 >> ĠList < Pair < Pair < K 1 , ĠK 2 >, ĠV >> . to Two Level Map ( ĊĠĠĠ Ġtop Destination : ĠM 1 , ĊĠĠĠ Ġbottom Destination : Ġ() Ġ-> ĠM 2 Ċ ): ĠM 1 Ġ{ ĊĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( key 1 , Ġkey 2 ) Ġ= Ġkey ĊĠĠĠĠĠĠĠ Ġtop Destination . get Or Put ( key 1 , Ġbottom Destination )[ key 2 ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtop Destination Ċ } Ċ Ċ /** Ċ Ġ* ĠWorks Ġsimilar ly Ġas Ġ[ to Two Level Map ] Ġbut Ġthe Ġfinal Ġmap Ġhas Ġthree Ġlevels . Ċ Ġ*/ Ċ fun Ġ< K 1 , ĠK 2 , ĠK 3 , ĠV > ĠMap < Triple < K 1 , ĠK 2 , ĠK 3 >, ĠV >. to Three Level Map (): ĠMap < K 1 , ĠMap < K 2 , ĠMap < K 3 , ĠV >>> Ġ= ĊĠĠĠ Ġto Three Level Map ( Linked HashMap (), Ġ{ ĠLinkedHashMap < K 2 , ĠMutable Map < K 3 , ĠV >>() Ġ}, Ġ{ ĠLinkedHashMap () Ġ}) Ċ Ċ /** Ċ Ġ* ĠWorks Ġsimilar ly Ġas Ġ[ to Two Level Map ] Ġbut Ġthe Ġfinal Ġmap Ġhas Ġthree Ġlevels . Ċ Ġ* Ġ[ top Destination ] Ġspecifies Ġwhich Ġmap Ġshould Ġbe Ġused Ġto Ġstore Ġthe Ġnew Ġprimary Ġkeys , Ċ Ġ* Ġ[ middle Destination ] Ġis Ġused Ġto Ġstore Ġthe Ġnew Ġsecondary Ġkeys Ġand Ġ[ bottom Destination ] Ġis Ġused Ġto Ġstore Ġthe Ġnew Ġt ert i ary Ġkeys . Ċ Ġ*/ Ċ inline Ġfun Ġ< K 1 , ĠK 2 , ĠK 3 , ĠV , ĠM 3 Ġ: ĠMutable Map < K 3 , ĠV >, ĠM 2 Ġ: ĠMutable Map < K 2 , ĠM 3 >, ĠM 1 Ġ: ĠMutable Map < K 1 , ĠM 2 >> ĊĠĠĠĠĠĠĠ ĠMap < Triple < K 1 , ĠK 2 , ĠK 3 >, ĠV >. to Three Level Map ( ĊĠĠĠ Ġtop Destination : ĠM 1 , ĊĠĠĠ Ġmiddle Destination : Ġ() Ġ-> ĠM 2 , ĊĠĠĠ Ġbottom Destination : Ġ() Ġ-> ĠM 3 Ċ ): ĠM 1 Ġ{ ĊĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( key 1 , Ġkey 2 , Ġkey 3 ) Ġ= Ġkey ĊĠĠĠĠĠĠĠ Ġtop Destination . get Or Put ( key 1 , Ġmiddle Destination ). get Or Put ( key 2 , Ġbottom Destination )[ key 3 ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtop Destination Ċ } Ċ Ċ /** Ċ Ġ* ĠCollect s Ġall Ġthe Ġvalues Ġfrom Ġthe Ġbottom Ġlevel Ġinto Ġset . Ċ Ġ*/ Ċ fun Ġ< K 1 , ĠK 2 , ĠV > ĠMap < K 1 , ĠMap < K 2 , ĠV >> . get Second Level Values (): ĠSet < V > Ġ= Ġthis . get Second Level Values To ( Linked HashSet ()) Ċ Ċ /** Ċ Ġ* ĠCollect s Ġall Ġthe Ġvalues Ġfrom Ġthe Ġbottom Ġlevel Ġinto Ġthe Ġgiven Ġcollection Ġ[ M ]. Ċ Ġ*/ Ċ fun Ġ< K 1 , ĠK 2 , ĠV , ĠM Ġ: ĠMutable Collection < V >> ĠMap < K 1 , ĠMap < K 2 , ĠV >> . get Second Level Values To ( destination : ĠM ): ĠM Ġ{ ĊĠĠĠ Ġfor Ġ(( _, Ġbottom Map ) Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdestination . addAll ( bottom Map . values ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ /** Ċ Ġ* ĠCollect s Ġall Ġthe Ġvalues Ġfrom Ġthe Ġbottom Ġlevel Ġinto Ġset . Ċ Ġ*/ Ċ fun Ġ< K 1 , ĠK 2 , ĠK 3 , ĠV > ĠMap < K 1 , ĠMap < K 2 , ĠMap < K 3 , ĠV >> >. get Third Level Values (): ĠSet < V > Ġ= Ġthis . get Third Level Values To ( Linked HashSet ()) Ċ Ċ /** Ċ Ġ* ĠCollect s Ġall Ġthe Ġvalues Ġfrom Ġthe Ġbottom Ġlevel Ġinto Ġthe Ġgiven Ġcollection Ġ[ M ]. Ċ Ġ*/ Ċ fun Ġ< K 1 , ĠK 2 , ĠK 3 , ĠV , ĠM Ġ: ĠMutable Collection < V >> ĠMap < K 1 , ĠMap < K 2 , ĠMap < K 3 , ĠV >> >. get Third Level Values To ( destination : ĠM ): ĠM Ġ{ ĊĠĠĠ Ġfor Ġ(( _, Ġsecond Level Map ) Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ(( _, Ġbottom Map ) Ġin Ġsecond Level Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination . addAll ( bottom Map . values ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ /** Ċ Ġ* ĠFor Ġeach Ġkey , Ġmerge s Ġall Ġthe Ġvalues Ġinto Ġone Ġcommon Ġlist . Ċ Ġ*/ Ċ fun Ġ< K , ĠV Ġ: ĠAny > ĠIterable < Map < K , ĠV >> . merge (): ĠMap < K , ĠList < V >> Ġ{ ĊĠĠĠ Ġval Ġkeys Ġ= Ġthis . map Ġ{ Ġit . keys Ġ}. union () ĊĠĠĠ Ġreturn Ġkeys . assoc With Ġ{ Ġkey Ġ-> Ġthis . map NotNull Ġ{ Ġmap Ġ-> Ġmap [ key ] Ġ} Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠFor Ġeach Ġkey , Ġmerge s Ġall Ġthe Ġlist Ġinto Ġone Ġcommon Ġlist . Ċ Ġ*/ Ċ fun Ġ< K , ĠV Ġ: ĠAny > ĠIterable < Map < K , ĠList < V >> >. flat Merge (): ĠMap < K , ĠList < V >> Ġ{ ĊĠĠĠ Ġval Ġkeys Ġ= Ġthis . map Ġ{ Ġit . keys Ġ}. union () ĊĠĠĠ Ġreturn Ġkeys . assoc With Ġ{ Ġkey Ġ-> Ġthis . flatMap Ġ{ Ġmap Ġ-> Ġmap [ key ] Ġ?: Ġempty List () Ġ} Ġ} Ċ } ĊĊĊ