package Ġcom . man zo . s lang . extensions Ċ Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . await All Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ /** Ċ Ġ* ĠCompare Ġthe Ġvalues Ġof Ġthe Ġobjects Ġof Ġ 2 Ġlists Ċ Ġ*/ Ċ infix Ġfun Ġ< T > ĠCollection < T >. isEqual Values ( collection : ĠCollection < T >) Ġ= ĊĠĠĠ Ġcollection . let Ġ{ Ġthis . size Ġ== Ġit . size Ġ&& Ġthis . contains All ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠCompare Ġthe Ġvalues Ġof Ġthe Ġobjects Ġof Ġ 2 Ġlists Ċ Ġ*/ Ċ infix Ġfun Ġ< T > ĠCollection < T >. isNot Equal Values ( collection : ĠCollection < T >) Ġ= ĊĠĠĠ Ġ!( this Ġis Equal Values Ġcollection ) Ċ Ċ /** Ċ Ġ* ĠAdd Ġan Ġobject Ġto Ġa Ġlist Ġif Ġnot Ġalready Ġpresent , Ġnull Ġor Ġblank Ċ Ġ* Ġ@ receiver ĠOB Ġany Ġobject Ċ Ġ* Ġ@ param Ġtarget List ĠMutable List < OB > Ċ Ġ* Ġ@ return ĠBoolean Ġresult Ġof Ġthe Ġoperation Ċ Ġ*/ Ċ fun Ġ< OB > ĠOB . add If Unique ( target List : ĠMutable List < OB >): ĠBoolean Ġ{ ĊĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġif Ġ( isBlank ()) Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġif Ġ(! target List . contains ( this )) Ġtarget List . add ( this ) Ġelse Ġfalse Ċ } Ċ Ċ /** Ċ Ġ* ĠAdd Ġan Ġobject Ġto Ġa Ġlist Ġif Ġnot Ġalready Ġpresent , Ġnull Ġor Ġblank Ċ Ġ* Ġ@ receiver ĠList < OB > Ċ Ġ* Ġ@ param Ġitem ĠOB Ġany Ġobject Ċ Ġ* Ġ@ return ĠBoolean Ġresult Ġof Ġthe Ġoperation Ċ Ġ*/ Ċ fun Ġ< OB > ĠList < OB >. add If Unique ( item : ĠOB ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġitem . add If Unique ( as Mutable ()) Ċ } Ċ Ċ /** Ċ Ġ* ĠCast Ġlist Ġto Ġmutable Ġlist , Ġor Ġreturns Ġnew Ġempty Ġlist Ġif Ġoriginal Ġlist Ġis Ġempty Ġ( list Ġcannot Ġbe Ġcast Ġto Ġmutable Ġif Ġempty ) Ċ Ġ* Ġ@ receiver ĠList < T > Ċ Ġ* Ġ@ return ĠMutable List < T > Ċ Ġ*/ Ċ fun Ġ< T > ĠList < T >. as Safe Mutable (): ĠMutable List < T > Ġ{ ĊĠĠĠ Ġreturn Ġ( if Ġ( isNotEmpty ()) Ġthis Ġas ĠMutable List Ġelse Ġmutable ListOf ()) Ċ } Ċ Ċ /** Ċ Ġ* ĠCast Ġlist Ġto Ġmutable Ġlist Ċ Ġ* Ġ@ receiver ĠList < T > Ċ Ġ* Ġ@ return ĠMutable List < T > Ċ Ġ*/ Ċ fun Ġ< T > ĠList < T >. as Mutable () Ġ= Ġthis Ġas ĠMutable List < T > Ċ Ċ /** Ċ Ġ* ĠRe places Ġwith Ġthe Ġprovided ĠnewValue Ġevery Ġobject Ġin Ġthe Ġlist Ġthat Ġmatches Ġthe Ġcondition Block Ċ Ġ* Ġ@ receiver ĠMutable List < T > Ċ Ġ* Ġ@ param ĠnewValue ĠT Ċ Ġ* Ġ@ param Ġcondition Block ĠFunction 1 < [@ kotlin . ParameterName ] ĠT , ĠBoolean > Ċ Ġ*/ Ċ fun Ġ< T > ĠMutable List < T >. replace ( newValue : ĠT , Ġcondition Block : Ġ( list Element : ĠT ) Ġ-> ĠBoolean ) Ġ{ ĊĠĠĠ ĠforEach Indexed Ġ{ Ġindex , Ġelement Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( condition Block ( element )) Ġadd ( index , ĠnewValue ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠRemoves Ġthe Ġfirst Ġelement Ġthat Ġmatches Ġthe Ġcondition Ġblock . Ċ Ġ* Ċ Ġ* Ġ@ receiver ĠMutable List < T > Ċ Ġ* Ġ@ param Ġcondition Block ĠFunction 1 < T , ĠBoolean > Ċ Ġ* Ġ@ return ĠTrue Ġif Ġcondition Ġis Ġfound Ġand Ġremoval Ġis Ġsuccessful . Ċ Ġ*/ Ċ fun Ġ< T > ĠMutable Collection < T >. remove First ( condition Block : Ġ( list Element : ĠT ) Ġ-> ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġfind Ġ{ Ġcondition Block ( it ) Ġ} ?. let Ġ{ Ġremove ( it ) Ġ} Ġ?: Ġfalse Ċ } Ċ Ċ /** Ċ Ġ* ĠRemoves Ġfrom Ġthe Ġlist Ġall Ġthe Ġelements Ġthat Ġmatch Ġthe Ġcondition Block Ċ Ġ* ĠPre Ġapi 2 4 Ġcompatible Ċ Ġ* Ċ Ġ* Ġ@ receiver ĠMutable List < T > Ċ Ġ* Ġ@ param Ġcondition Block ĠFunction 1 < T , ĠBoolean > Ċ Ġ*/ Ċ fun Ġ< T > ĠMutable Collection < T >. remove ( condition Block : Ġ( list Element : ĠT ) Ġ-> ĠBoolean ) Ġ{ ĊĠĠĠ Ġiterator (). let Ġ{ Ġiterator Ġ-> ĊĠĠĠĠĠĠĠ Ġiterator . forEach Ġ{ Ġif Ġ( condition Block ( it )) Ġiterator . remove () Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlist Ġcontaining Ġthe Ġresults Ġof Ġapplying Ġthe Ġgiven Ġ[ transform ] Ġfunction Ġto Ġeach Ġelement Ġin Ġthe Ġoriginal Ġlist . Ċ Ġ* ĠThe Ġlist Ġis Ġsplit ted Ġin Ġchunks Ġso Ġthat Ġmultiple Ġsuspend Ġ[ transform ] s Ġcan Ġbe Ġexecuted Ġin Ġparallel Ġusing Ġ[ async ]. Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ--- Ġexample Ġ--- Ċ Ġ* Ċ Ġ* Ġval Ġping Results Ġ= Ġip Addresses . map Async ( coroutine Scope ) Ġ{ Ġping Address ( it ) Ġ} Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ@ receiver ĠList < T > Ċ Ġ* Ġ@ param Ġscope ĠC Ġ- Ġa Ġ[ Coroutine Scope ] Ċ Ġ* Ġ@ param Ġchunk Size Ġ- ĠInt Ġsize Ġof Ġthe Ġchunks Ċ Ġ* Ġ@ param Ġtransform Ġ- Ġthe Ġoperation Ġto Ġperform Ċ Ġ* Ġ@ return ĠList < R > Ċ Ġ*/ Ċ suspend Ġfun Ġ< T , ĠR , ĠC Ġ: ĠCor outine Scope > ĠCollection < T >. map Async ( ĊĠĠĠ Ġscope : ĠC , ĊĠĠĠ Ġchunk Size : ĠInt Ġ= Ġ 4 , ĊĠĠĠ Ġtransform : Ġsuspend Ġ( element : ĠT ) Ġ-> ĠR Ċ ): ĠCollection < R > Ġ{ ĊĠĠĠ Ġreturn Ġwith Context ( scope . coroutine Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġas Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. chunk ed ( chunk Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġsub list Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub list . map Ġ{ Ġtransform ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. await All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatten () ĊĠĠĠ Ġ} Ċ } Ċ