package Ġcom . inl ac ou . ink kotlin extensions Ċ Ċ import Ġjava . lang . IllegalArgumentException Ċ import Ġjava . util . stream . Stream Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . round ToInt Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlist Ġcontaining Ġall Ġelements Ġof Ġthe Ġoriginal Ġcollection Ġand Ġthe Ġelements Ġcontained Ġin Ġthe Ġgiven Ġ[ other ] Ġcollection Ġwithout Ġduplicates . Ċ Ġ* Ċ Ġ* ĠIn Ġcase Ġof Ġduplicate , Ġtakes Ġthe Ġelement Ġfrom Ġthe Ġfirst Ġlist . Ċ Ġ*/ Ċ fun Ġ< T > ĠIterable < T >. merge By ( other : ĠIterable < T >, Ġequals : Ġ( T , ĠT ) Ġ-> ĠBoolean ): ĠList < T > Ġ{ Ċ ĉ val Ġset Ġ= Ġmutable ListOf < T >() Ċ ĉ set . addAll ( this ) Ċ ĉ other . forEach Ġ{ Ġsecond Ġ-> Ċĉ ĉ if ( set . find Ġ{ Ġequals ( second , Ġit ) Ġ} == null ) Ġset . add ( second ) Ċ ĉ } Ċ ĉ return Ġset Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlist Ġcontaining Ġall Ġelements Ġof Ġthe Ġoriginal Ġcollection Ġexcept Ġthe Ġelements Ġcontained Ġin Ġthe Ġgiven Ġ[ other ] Ġcollection . Ċ Ġ*/ Ċ fun Ġ< T > ĠIterable < T >. minus By ( other : ĠIterable < T >, Ġequals : Ġ( T , ĠT ) Ġ-> ĠBoolean ): ĠList < T > Ġ{ Ċ ĉ val Ġset Ġ= Ġmutable ListOf < T >() Ċ ĉ this . forEach Ġ{ Ġfirst Ġ-> Ċĉ ĉ val Ġpresent Ġ= Ġother . find Ġ{ Ġequals ( first , Ġit ) Ġ} != null Ċĉ ĉ if (! present ) Ġset . add ( first ) Ċ ĉ } Ċ ĉ return Ġset Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġset Ġcontaining Ġall Ġelements Ġthat Ġare Ġcontained Ġby Ġboth Ġthis Ġcollection Ġand Ġthe Ġspecified Ġcollection . Ċ Ġ* Ċ Ġ* ĠThe Ġreturned Ġset Ġpre serves Ġthe Ġelement Ġiteration Ġorder Ġof Ġthe Ġoriginal Ġcollection . Ċ Ġ* Ċ Ġ* ĠTo Ġget Ġa Ġset Ġcontaining Ġall Ġelements Ġthat Ġare Ġcontained Ġat Ġleast Ġin Ġone Ġof Ġthese Ġcollections Ġuse Ġ[ union ]. Ċ Ġ*/ Ċ fun Ġ< T > ĠIterable < T >. intersect By ( other : ĠIterable < T >, Ġequals : Ġ( T , ĠT ) Ġ-> ĠBoolean ): ĠSet < T > Ġ{ Ċ ĉ val Ġset Ġ= Ġmutable Set Of < T >() Ċ ĉ this . forEach Ġ{ Ġfirst Ġ-> Ċĉ ĉ val Ġpresent Ġ= Ġother . find Ġ{ Ġequals ( first , Ġit ) Ġ} != null Ċĉ ĉ if ( present ) Ġset . add ( first ) Ċ ĉ } Ċ ĉ return Ġset Ċ } Ċ Ċ fun Ġ< T > ĠIterator < T >. toList (): ĠList < T > Ġ{ Ċ ĉ val Ġmutable List Ġ= Ġmutable ListOf < T >() Ċ ĉ while Ġ( hasNext ()) Ġmutable List . add ( next ()) Ċ ĉ return Ġmutable List Ċ } Ċ Ċ fun Ġ< T > ĠStream < T >. toList (): ĠList < T > Ġ= Ġmutable ListOf < T >(). apply Ġ{ Ġthis @ toList . forEach Ġ{ Ġthis . add ( it ) Ġ} Ġ} Ċ Ċ fun Ġ< T > ĠMutable List < T >. concat ( other List : ĠList < T >): ĠMutable List < T > Ġ{ Ċ ĉ addAll ( other List ) Ċ ĉ return Ġthis Ċ } Ċ Ċ fun Ġ< T > ĠMutable List Iterator < T >. add Before ( item : ĠT ){ Ċ ĉ previous () Ċ ĉ add ( item ) Ċ ĉ next () Ċ } Ċ Ċ fun Ġ< T , ĠV > ĠList < Pair < T , ĠV >> . to HashMap (): ĠHashMap < T , ĠV > Ġ{ Ċ ĉ val Ġvalues Ġ= Ġhash Map Of < T , ĠV >() Ċ ĉ forEach Ġ{ Ġvalues [ it . first ] Ġ= Ġit . second Ġ} Ċ ĉ return Ġvalues Ċ } Ċ Ċ fun Ġ< T > ĠList < T >. safe Get ( i : ĠInt ): ĠT ? Ġ{ Ċ ĉ return Ġtry Ġ{ Ċĉ ĉ get ( i ) Ċ ĉ } catch Ġ( i oo be : ĠIndex OutOfBoundsException ){ Ċĉ ĉ null Ċ ĉ } Ċ } Ċ Ċ fun Ġ< T > ĠList < T >. getItem By Percentage ( f : ĠFloat ): ĠT ? Ġ{ Ċ ĉ var Ġindex Ġ= Ġ( size * f ). toInt () Ċ ĉ if ( index >= size ) Ġindex Ġ= Ġsize - 1 Ċ ĉ if ( index < 0 ) Ġindex Ġ= Ġ 0 Ċ ĉ return Ġthis [ index ] Ċ } Ċ Ċ /** Ċ Ġ* ĠGets Ġnearest Ġselect able Ġitem . ĠI g no res Ġnon Ġselect able Ġitems . Ċ Ġ* Ġ@ param Ġrough Index Ġapproximate Ġindex Ġto Ġstart Ġsearch . ĠRo unded Ġup . ĠOn Ġequal Ġdistance , Ġhigher Ġindex Ġhas Ġpriority . Ċ Ġ* Ġ@ param Ġselect able Ġmethod Ġto Ġfilter Ġonly Ġto Ġselect able Ġitems Ċ Ġ* Ġ@ return ĠT Ċ Ġ* Ġ@ throws ĠNoSuch ElementException Ġwhen Ġthere Ġis Ġno Ġitem Ġto Ġselect Ġ( no Ġselect able Ġitems ). Ċ Ġ*/ Ċ fun Ġ< T > ĠList < T >. get Nearest Selectable ( rough Index : ĠFloat , Ġselect able : Ġ( T ) Ġ-> ĠBoolean ): ĠT Ġ{ Ċ ĉ val Ġindex Ġ= Ġrough Index . round ToInt () Ċ ĉ val Ġround Up Ġ= Ġindex >= rough Index Ċ ĉ return ĠgetNext Nearest Selectable ( last Index Ġ= Ġindex , Ġgo Up Ġ= Ġ! round Up , Ġselect able Ġ= Ġselect able ) Ċ } Ċ Ċ /** Ċ Ġ* ĠGets Ġnext Ġselect able Ġitem Ġon Ġlist . ĠI g no res Ġnon Ġselect able Ġitems . Ċ Ġ* Ġ@ param Ġlast Index Ġto Ġknow Ġwhere Ġwe Ġare Ċ Ġ* Ġ@ param Ġstep Size Ġto Ġknow Ġstep Ġsize Ġ( it Ġincreases , Ġas Ġwe Ġgo Ġbo unc ing Ġtop / bottom Ġbecause Ġwe Ġcheck Ġfor Ġthe Ġnearest Ġone Ġon Ġany Ġdirection . Ċ Ġ* Ġ@ param Ġgo Up Ġto Ġknow Ġcurrent Ġdirection Ċ Ġ* Ġ@ param Ġtop Reached Ġif Ġtop Ġis Ġreached , Ġwe Ġno Ġlonger Ġneed Ġto Ġgo Ġin Ġthat Ġdirection Ċ Ġ* Ġ@ param Ġbottom Reached Ġif Ġbottom Ġreached , Ġwe Ġno Ġlonger Ġneed Ġto Ġgo Ġin Ġthat Ġdirection Ċ Ġ* Ġ@ param Ġselect able Ġmethod Ġto Ġfilter Ġonly Ġto Ġselect able Ġitems Ċ Ġ* Ġ@ return ĠT Ċ Ġ* Ġ@ throws ĠNoSuch ElementException Ġwhen Ġthere Ġis Ġno Ġitem Ġto Ġselect Ġ( no Ġselect able Ġitems Ġin Ġany Ġdirection , Ġor Ġno Ġitems Ġat Ġall , Ġfor Ġexample ). Ċ Ġ*/ Ċ private Ġfun Ġ< T > ĠList < T >. getNext Nearest Selectable ( last Index : ĠInt , Ġstep Size : ĠInt Ġ= Ġ 0 , Ġgo Up : ĠBoolean , Ġtop Reached : ĠBoolean Ġ= Ġfalse , Ġbottom Reached : ĠBoolean Ġ= Ġfalse , Ġselect able : Ġ( T ) Ġ-> ĠBoolean ): ĠT Ġ{ Ċ ĉ var Ġaux Top Reached Ġ= Ġtop Reached Ċ ĉ var Ġaux Bottom Reached Ġ= Ġbottom Reached Ċ ĉ val Ġnew Index Ġ= Ġlast Index + Ċĉĉ ĉ if ( go Up ) Ġstep Size Ċĉĉ ĉ else Ġ- step Size Ċ ĉ val Ġcurrent Item Ġ= Ġtry Ġ{ Ċĉ ĉ get ( new Index ) Ċ ĉ } catch Ġ( i oo be : ĠIndex OutOfBoundsException ){ Ċĉ ĉ if ( go Up ) Ġaux Top Reached Ġ= Ġtrue Ċĉ ĉ if (! go Up ) Ġaux Bottom Reached Ġ= Ġtrue Ċĉ ĉ null Ċ ĉ } Ċ ĉ return Ġif ( currentItem != null Ġ&& Ġselect able . invoke ( currentItem )){ Ċĉ ĉ currentItem Ċ ĉ } else Ġif ( top Reached Ġ&& Ġbottom Reached ) Ġ{ Ċĉ ĉ throw ĠNoSuch ElementException () Ċ ĉ } else Ġ{ Ċĉ ĉ getNext Nearest Selectable ( last Index Ġ= Ġnew Index , Ġstep Size Ġ= Ġwhen Ġ{ Ċĉĉ ĉ top Reached Ġ-> Ġ 1 Ċĉĉ ĉ bottom Reached Ġ-> Ġ 1 Ċĉĉ ĉ else Ġ-> Ġstep Size + 1 Ċĉ ĉ }, Ġgo Up Ġ= Ġwhen Ġ{ Ċĉĉ ĉ top Reached Ġ-> Ġfalse Ċĉĉ ĉ bottom Reached Ġ-> Ġtrue Ċĉĉ ĉ else Ġ-> Ġ! go Up Ċĉ ĉ }, Ġtop Reached Ġ= Ġaux Top Reached , Ġbottom Reached Ġ= Ġaux Bottom Reached , Ġselect able Ġ= Ġselect able ) Ċ ĉ } Ċ } Ċ Ċ /** Ċ Ġ* ĠRemove Ġlast Ġappearance Ġof Ġgiven Ġitem Ċ Ġ*/ Ċ fun Ġ< T > ĠList < T >. remove Last Item ( item : ĠT ): ĠList < T > Ġ{ Ċ ĉ return Ġto Mutable List (). apply Ġ{ Ġremove At ( lastIndexOf ( item )) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlist Ġcontaining Ġall Ġelements Ġof Ġthe Ġoriginal Ġcollection Ġfrom Ġthe Ġgiven Ġelement Ġon ward Ġ( not Ġcontaining Ġgiven Ġelement ) Ċ Ġ* Ċ Ġ* ĠIf Ġitem Ġis Ġnot Ġfound , Ġit Ġreturns Ġthe Ġwhole Ġlist . Ċ Ġ*/ Ċ fun Ġ< T > ĠList < T >. sub list After ( item : ĠT ): ĠList < T > Ġ{ Ċ ĉ return Ġtake Last ( this . size - this . indexOf ( item )- 1 ) Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlist Ġcontaining Ġall Ġelements Ġof Ġthe Ġoriginal Ġcollection Ġfrom Ġthe Ġgiven Ġelement Ġon ward Ġ( containing Ġgiven Ġelement ) Ċ Ġ* Ċ Ġ* ĠIf Ġitem Ġis Ġnot Ġfound , Ġit Ġreturns Ġthe Ġwhole Ġlist . Ċ Ġ*/ Ċ fun Ġ< T > ĠList < T >. sub list From ( item : ĠT ): ĠList < T > Ġ{ Ċ ĉ return Ġtake Last ( this . size - this . indexOf ( item )) Ċ } Ċ Ċ /* fun Ġ< T > ĠList < T >. safe RemoveAt ( index : ĠInt ): ĠList < T > Ġ{ Ċ ĉ return Ġif ( 0 < index Ġ&& Ġindex < this . size ) Ġ{ Ċĉ ĉ val Ġaux Ġ= Ġmutable ListOf < T >() Ċĉ ĉ aux . addAll ( this . sub List ( 0 , Ġindex )) Ċĉ ĉ aux . addAll ( this . sub List ( index + 1 , Ġthis . size )) Ċĉ ĉ aux Ċ ĉ } else { Ċĉ ĉ this Ċ ĉ } Ċ }*/ Ċ Ċ fun Ġ< T > ĠList < T >. sub list By ( by : Ġ( T ) Ġ-> ĠAny ?): ĠList < List < T >> Ġ{ Ċ ĉ val Ġmap Ġ= Ġhash Map Of < Any , ĠMutable List < T >>() Ċ ĉ val Ġun Key ed Ġ= Ġmutable ListOf < T >() Ċ ĉ this . forEach Ġ{ Ċĉ ĉ val Ġkey Ġ= Ġby . invoke ( it ) Ċĉ ĉ if ( key != null ) Ġ{ Ċĉĉ ĉ val Ġlist Ġ= Ġmap [ key ] Ġ?: Ġmutable ListOf () Ċĉĉ ĉ list . add ( it ) Ċĉĉ ĉ map [ key ] Ġ= Ġlist Ċĉ ĉ } Ġelse Ġun Key ed . add ( it ) Ċ ĉ } Ċ ĉ val Ġresult Ġ= Ġmap . toList (). map Ġ{ Ġit . second Ġ} Ċ ĉ result . to Mutable List (). add ( un Key ed ) Ċ ĉ return Ġresult Ċ } Ċ Ċ fun Ġ< T , ĠP > ĠList < T >. pair Sub list By ( by : Ġ( T ) Ġ-> ĠP ?): ĠList < Pair < P ?, ĠList < T >>> Ġ{ Ċ ĉ val Ġmap Ġ= Ġhash Map Of < P ?, ĠMutable List < T >>() Ċ ĉ val Ġun Key ed Ġ= Ġmutable ListOf < T >() Ċ ĉ this . forEach Ġ{ Ċĉ ĉ val Ġkey Ġ= Ġby . invoke ( it ) Ċĉ ĉ if ( key != null ) Ġ{ Ċĉĉ ĉ val Ġlist Ġ= Ġmap [ key ] Ġ?: Ġmutable ListOf () Ċĉĉ ĉ list . add ( it ) Ċĉĉ ĉ map [ key ] Ġ= Ġlist Ċĉ ĉ } Ġelse Ġun Key ed . add ( it ) Ċ ĉ } Ċ ĉ val Ġresult Ġ= Ġmap . toList () Ċ ĉ result . to Mutable List (). add ( Pair ( null , Ġun Key ed )) Ċ ĉ return Ġresult Ċ } Ċ Ċ /** Ċ Ġ* ĠGet Ġnext Ġvalue Ġ( given Ġindex + 1 ) Ġsafely Ġ( always Ġreturn Ġvalue ) Ġand Ġlooping Ġ( if Ġindex == max Index , Ġindex + 1 Ġis Ġthe Ġfirst Ġvalue , Ġi . e . Ġstart Ġagain Ġfrom Ġthe Ġstart ) Ċ Ġ*/ Ċ fun Ġ< T > ĠList < T >. safe Next Loop ing ( currentIndex : ĠInt ): ĠT Ġ{ Ċ ĉ return Ġtry Ġ{ Ċĉ ĉ get ( currentIndex + 1 ) Ċ ĉ } catch Ġ( i oo be : ĠIndex OutOfBoundsException ) Ġ{ Ċĉ ĉ get ( 0 ) Ċ ĉ } Ċ } Ċ Ċ /** Ċ Ġ* ĠGet Ġprevious Ġvalue Ġ( given Ġindex - 1 ) Ġsafely Ġ( return Ġnull Ġif Ġno Ġvalue ) Ġand Ġlooping Ġ( if Ġindex == 0 , Ġindex - 1 Ġis Ġthe Ġlast Ġvalue , Ġi . e . Ġstart Ġagain Ġfrom Ġthe Ġrear ) Ċ Ġ*/ Ċ fun Ġ< T > ĠList < T >. safe Previous Loop ing ( currentIndex : ĠInt ): ĠT ? Ġ{ Ċ ĉ return Ġtry Ġ{ Ċĉ ĉ get ( currentIndex - 1 ) Ċ ĉ } catch Ġ( i oo be : ĠIndex OutOfBoundsException ){ Ċĉ ĉ try Ġ{ Ċĉĉ ĉ get ( size - 1 ) Ċĉ ĉ } catch Ġ( i oo be : ĠIndex OutOfBoundsException ){ Ċĉĉ ĉ null Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ fun Ġ< T > ĠList < T >. get Fast est Path From Two Index In Circular List ( first : ĠInt , Ġsecond : ĠInt ): ĠInt Ġ{ Ċ ĉ val Ġcur ated First Ġ= Ġif ( first > second ) Ġfirst Ġelse Ġfirst + size Ċ ĉ val Ġcur ated Second Ġ= Ġif ( second > first ) Ġsecond Ġelse Ġsecond + size Ċ ĉ val Ġfirst Value Ġ= Ġsecond - first Ċ ĉ val Ġsecond Value Ġ= Ġcur ated Second - cur ated First Ċ ĉ return Ġif ( abs ( first Value ) Ġ< Ġabs ( second Value )) Ġfirst Value Ċ ĉ else Ġsecond Value Ċ } Ċ Ċ fun Ġ< T > ĠMutable List < T >. safe RemoveAt ( i : ĠInt ): ĠT ? Ġ{ Ċ ĉ return Ġtry Ġ{ Ċĉ ĉ remove At ( i ) Ċ ĉ } catch Ġ( i oo be : ĠIndex OutOfBoundsException ){ Ċĉ ĉ null Ċ ĉ } Ċ } Ċ Ċ fun Ġ< T > ĠMutable List < T >. safe Add Before Last ( item : ĠT ): ĠMutable List < T > Ġ{ Ċ ĉ return Ġtry Ġ{ Ċĉ ĉ add ( last Index , Ġitem ) Ċĉ ĉ this Ċ ĉ } catch Ġ( i oo be : ĠIndex OutOfBoundsException ){ Ċĉ ĉ mutable ListOf ( item ) Ċ ĉ } Ċ } Ċ Ċ fun Ġ< T > ĠMutable List < T >. add Before Last ( item : ĠT ): ĠMutable List < T > Ġ{ Ċ ĉ add ( last Index , Ġitem ) Ċ ĉ return Ġthis Ċ } Ċ Ċ fun Ġ< T > ĠMutable List < T >. replaceAll ( item : ĠT , Ġreplace Condition : Ġ( Int , ĠT ) Ġ-> ĠBoolean ): ĠMutable List < T > Ġ{ Ċ ĉ ( 0 Ġuntil Ġsize ). forEach Ġ{ Ġindex Ġ-> Ċĉ ĉ val Ġcurrent Item Ġ= Ġget ( index ) Ċĉ ĉ if ( replace Condition ( index , Ġcurrent Item )) Ġ{ Ċĉĉ ĉ remove ( currentItem ) Ċĉĉ ĉ add ( index , Ġitem ) Ċĉ ĉ } Ċ ĉ } Ċ ĉ return Ġthis Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ param Ġindex ToAdd If NotFound Ġif Ġ- 1 , Ġadd Ġat Ġend Ċ Ġ*/ Ċ fun Ġ< T > ĠMutable List < T >. replaceAll Or Add At If NotFound ( new Item : ĠT , Ġindex ToAdd If NotFound : ĠInt , Ġreplace Condition : Ġ( T ) Ġ-> ĠBoolean ): ĠMutable List < T > Ġ{ Ċ ĉ var Ġfound Ġ= Ġfalse Ċ ĉ ( 0 Ġuntil Ġsize ). forEach Ġ{ Ġindex Ġ-> Ċĉ ĉ val Ġcurrent Item Ġ= Ġget ( index ) Ċĉ ĉ if Ġ( replace Condition ( currentItem )) Ġ{ Ċĉĉ ĉ remove ( currentItem ) Ċĉĉ ĉ add ( index , Ġnew Item ) Ċĉĉ ĉ found Ġ= Ġtrue Ċĉ ĉ } Ċ ĉ } Ċ ĉ if Ġ(! found ) Ċĉ ĉ if ( index ToAdd If NotFound == - 1 ) Ġadd ( size , Ġnew Item ) Ċĉ ĉ else Ġadd ( index ToAdd If NotFound , Ġnew Item ) Ċ ĉ return Ġthis Ċ } Ċ Ċ fun Ġ< T > ĠList < T >. avoid ( n : ĠInt ): ĠList < T > Ġ{ Ċ ĉ return Ġif ( n == 0 ) Ġthis Ċ ĉ else Ġsub List ( n , Ġsize ) Ċ } Ċ Ċ fun Ġ< T > ĠList < T >. avoid OrEmpty ( n : ĠInt ): ĠList < T > Ġ{ Ċ ĉ return Ġtry { Ċĉ ĉ if ( n == 0 ) Ġthis Ċĉ ĉ else Ġsub List ( n , Ġsize ) Ċ ĉ } catch Ġ( i oo be : Ġjava . lang . Index OutOfBoundsException ){ Ċĉ ĉ listOf () Ċ ĉ } catch Ġ( ia e : ĠIllegalArgumentException ) Ġ{ Ċĉ ĉ System . err . println (" error Ġar ose Ġon Ġavoid OrEmpty Ġmethod Ġ| Ġn : Ġ$ n Ġ| Ġlist : Ġ$ this ") Ċĉ ĉ listOf () Ċ ĉ } Ċ } Ċ Ċ val Ġ< T > ĠList < T >. max Index : ĠInt Ċ ĉ get () Ġ= Ġsize - 1 Ċ Ċ inline Ġfun Ġ< T > ĠList < T >. reversed ForEach ( operation : Ġ( T ) Ġ-> ĠUnit ) Ġ= Ġreversed (). forEach ( operation ) Ċ Ċ fun Ġ< T > ĠMutable List < T >. concurrent Remove ( item : ĠT ) Ġ{ Ċ ĉ val Ġiterator Ġ= Ġiterator () Ċ ĉ while ( iterator . hasNext ()) Ġ{ Ċĉ ĉ val Ġcurrent Item Ġ= Ġiterator . next () Ċĉ ĉ if ( currentItem == item ) Ġ{ Ċĉĉ ĉ synchronized ( this ) Ġ{ Ċĉĉĉ ĉ iterator . remove () Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ fun Ġ< T , ĠV > ĠList < T >. to Pairs ( second : ĠV ): ĠList < Pair < T , ĠV >> Ġ{ Ċ ĉ return Ġmap Ġ{ ĠPair ( it , Ġsecond ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠIn tended Ġuse Ġof Ġmerging Ġtwo Ġlists Ġwith Ġthe Ġsame Ġnumber Ġof Ġitems Ċ Ġ*/ Ċ fun Ġ< T , ĠV > ĠList < T >. to Pairs ( second : ĠList < V >): ĠList < Pair < T , ĠV >> Ġ{ Ċ ĉ return Ġmap Indexed Ġ{ Ġindex , Ġit Ġ-> ĠPair ( it , Ġsecond [ index ]) Ġ} Ċ } Ċ Ċ fun Ġ< T > ĠIterable < T >. group Con secutive By ( group Identifier : Ġ( T , ĠT ) Ġ-> ĠBoolean ) Ġ= Ċ ĉ if Ġ(! this . any ()) Ċĉ ĉ emptyList () Ċ ĉ else Ċĉ ĉ this . drop ( 1 ) Ċĉĉ ĉ . fold ( mutable ListOf ( mutable ListOf ( this . first ()))) Ġ{ Ġgroups , Ġt Ġ-> Ċĉĉĉ ĉ groups . last (). apply Ġ{ Ċĉĉĉĉ ĉ if Ġ( group Identifier . invoke ( last (), Ġt )) Ġ{ Ċĉĉĉĉĉ ĉ add ( t ) Ċĉĉĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉĉĉ ĉ groups . add ( mutable ListOf ( t )) Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉĉ ĉ groups Ċĉĉ ĉ } Ċ Ċ fun Ġ< T > ĠHashMap < T , ĠBoolean >. merge ( list : ĠList < T >, Ġdefault : ĠBoolean ): ĠHashMap < T , ĠBoolean > Ġ{ Ċ ĉ list . forEach Ġ{ Ġthis [ it ] Ġ= Ġthis [ it ] Ġ?: Ġdefault Ġ} Ċ ĉ return Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠTakes Ġcurrent Ġlist Ġand Ġ@ return Ġa Ġnew Ġone Ġwith Ġthe Ġsame Ġelements Ġbut Ġdifferent Ġorder . Ċ Ġ* ĠTake Ġelements Ġfrom Ġgiven Ġ@ param Ġindex Ġto Ġend , Ġand Ġthen Ġadds Ġtoo Ġthe Ġelements Ġfrom Ġthe Ġstart Ġto Ġ@ param Ġindex . Ċ Ġ* ĠList ĠA , B , C , D , E , F Ġchanged Ġstart Ġto Ġ 1 Ġwould Ġbe ĠB , C , D , E , F , A Ċ Ġ*/ Ċ fun Ġ< T > ĠList < T >. change Start To Index ( index : ĠInt ): ĠList < T > Ġ{ Ċ ĉ val Ġresult Ġ= Ġmutable ListOf < T >() Ċ ĉ result . addAll ( this . sub List ( index , Ġthis . size )) Ċ ĉ result . addAll ( this . sub List ( 0 , Ġindex )) Ċ ĉ return Ġresult Ċ } Ċ Ċ inline Ġfun Ġ< T > ĠIterable < T >. tap Indexed ( function : Ġ( index : ĠInt , ĠT ) Ġ-> ĠUnit ): ĠIterable < T > Ġ= Ġthis . also Ġ{ ĠforEach Indexed ( function ) Ġ} Ċ inline Ġfun Ġ< T > ĠIterable < T >. tap ( function : Ġ( T ) Ġ-> ĠUnit ): ĠIterable < T > Ġ= Ġthis . also Ġ{ ĠforEach ( function ) Ġ}