/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠBoston ĠVan se ghi Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġb van seg . kotlin commons . grouping . collection Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Collection ] Ġclass Ġthat Ġsupports Ġtwo Ġkeys Ġ([ K 1 ], Ġ[ K 2 ]) Ġmapped Ġto Ġa Ġsingle Ġvalue Ġ[ V ]. Ċ Ġ* Ċ Ġ* Ġ@ author ĠBoston ĠVan se ghi Ċ Ġ* Ġ@ since Ġ 2 . 1 . 6 Ċ Ġ*/ Ċ class ĠMulti Key HashMap < K 1 , ĠK 2 , ĠV > Ġ: ĠIterable < Map . Entry < K 1 , ĠV >> Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbacking Map 1 Ġ= ĠDual HashMap < K 1 , ĠV >() ĊĠĠĠ Ġprivate Ġval Ġbacking Map 2 Ġ= ĠDual HashMap < K 2 , ĠV >() ĊĊĠĠĠ Ġfun Ġcontains ( key 1 : ĠK 1 , Ġkey 2 : ĠK 2 ): ĠBoolean Ġ= Ġbacking Map 1 . contains ( key 1 ) Ġ&& Ġbacking Map 2 . contains ( key 2 ) ĊĠĠĠ Ġfun Ġcontains Value ( value : ĠV ): ĠBoolean Ġ= Ġbacking Map 1 . contains Value ( value ) Ġ&& Ġbacking Map 2 . contains Value ( value ) ĊĠĠĠ Ġfun ĠisEmpty (): ĠBoolean Ġ= Ġbacking Map 1 . isEmpty () Ġ&& Ġbacking Map 2 . isEmpty () ĊĊĠĠĠ Ġfun Ġput ( key 1 : ĠK 1 , Ġkey 2 : ĠK 2 , Ġvalue : ĠV ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbacking Map 1 [ key 1 ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġbacking Map 2 [ key 2 ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ( key 1 : ĠK 1 ?, Ġkey 2 : ĠK 2 ?): ĠV ? Ġ= Ġbacking Map 1 [ key 1 ] Ġ?: Ġbacking Map 2 [ key 2 ] ĊĊĠĠĠ Ġfun Ġget First ( key 1 : ĠK 1 ?): ĠV ? Ġ= Ġbacking Map 1 [ key 1 ] ĊĠĠĠ Ġfun Ġget Second ( key 1 : ĠK 2 ?): ĠV ? Ġ= Ġbacking Map 2 [ key 1 ] ĊĊĠĠĠ Ġfun Ġremove ( key 1 : ĠK 1 , Ġkey 2 : ĠK 2 ): ĠV ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue 1 : ĠV ? Ġ= Ġbacking Map 1 . remove ( key 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġvalue 2 Ġ= Ġbacking Map 2 . remove ( key 2 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue 1 Ġ?: Ġvalue 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġbacking Map 1 . clear () ĊĠĠĠĠĠĠĠ Ġbacking Map 2 . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreverse () Ġ= Ġbacking Map 1 . reverse () ĊĠĠĠ Ġfun Ġsecond Reverse () Ġ= Ġbacking Map 2 . reverse () ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < Map . Entry < K 1 , ĠV >> Ġ= Ġbacking Map 1 . entries . iterator () ĊĠĠĠ Ġfun Ġsecond Iterator (): ĠIterator < Map . Entry < K 2 , ĠV >> Ġ= Ġbacking Map 2 . entries . iterator () Ċ }