/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġandroidx . compose . ui . text Ċ Ċ import Ġandroidx . compose . ui . util . fast ForEach Ċ import Ġkotlin . contracts . Experimental Contracts Ċ import Ġkotlin . contracts . contract Ċ Ċ // ĠTODO : Ġremove Ġthese Ġwhen Ġwe Ġcan Ġadd Ġnew ĠAPIs Ġto Ġui - util Ġoutside Ġof Ġbeta Ġcycle Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlist Ġcontaining Ġonly Ġelements Ġmatching Ġthe Ġgiven Ġ[ predicate ]. Ċ Ġ* Ċ Ġ* Ġ** Do Ġnot Ġuse Ġfor Ġcollections Ġthat Ġcome Ġfrom Ġpublic ĠAPIs **, Ġsince Ġthey Ġmay Ġnot Ġsupport Ġrandom Ċ Ġ* Ġaccess Ġin Ġan Ġefficient Ġway , Ġand Ġthis Ġmethod Ġmay Ġactually Ġbe Ġa Ġlot Ġslower . ĠOnly Ġuse Ġfor Ċ Ġ* Ġcollections Ġthat Ġare Ġcreated Ġby Ġcode Ġwe Ġcontrol Ġand Ġare Ġknown Ġto Ġsupport Ġrandom Ġaccess . Ċ Ġ*/ Ċ @ Opt In ( Experimental Contracts :: class ) Ċ internal Ġinline Ġfun Ġ< T > ĠList < T >. fast Filter ( predicate : Ġ( T ) Ġ-> ĠBoolean ): ĠList < T > Ġ{ ĊĠĠĠ Ġcontract Ġ{ Ġcalls In Place ( predicate ) Ġ} ĊĠĠĠ Ġval Ġtarget Ġ= ĠArrayList < T >( size ) ĊĠĠĠ Ġfast ForEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( predicate ( it )) Ġtarget Ġ+= Ġ( it ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtarget Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlist Ġcontaining Ġonly Ġelements Ġfrom Ġthe Ġgiven Ġcollection Ċ Ġ* Ġhaving Ġdistinct Ġkeys Ġreturned Ġby Ġthe Ġgiven Ġ[ selector ] Ġfunction . Ċ Ġ* Ċ Ġ* ĠThe Ġelements Ġin Ġthe Ġresulting Ġlist Ġare Ġin Ġthe Ġsame Ġorder Ġas Ġthey Ġwere Ġin Ġthe Ġsource Ġcollection . Ċ Ġ* Ċ Ġ* Ġ** Do Ġnot Ġuse Ġfor Ġcollections Ġthat Ġcome Ġfrom Ġpublic ĠAPIs **, Ġsince Ġthey Ġmay Ġnot Ġsupport Ġrandom Ċ Ġ* Ġaccess Ġin Ġan Ġefficient Ġway , Ġand Ġthis Ġmethod Ġmay Ġactually Ġbe Ġa Ġlot Ġslower . ĠOnly Ġuse Ġfor Ċ Ġ* Ġcollections Ġthat Ġare Ġcreated Ġby Ġcode Ġwe Ġcontrol Ġand Ġare Ġknown Ġto Ġsupport Ġrandom Ġaccess . Ċ Ġ*/ Ċ @ Opt In ( Experimental Contracts :: class ) Ċ internal Ġinline Ġfun Ġ< T , ĠK > ĠList < T >. fast Distinct By ( selector : Ġ( T ) Ġ-> ĠK ): ĠList < T > Ġ{ ĊĠĠĠ Ġcontract Ġ{ Ġcalls In Place ( selector ) Ġ} ĊĠĠĠ Ġval Ġset Ġ= ĠHashSet < K >( size ) ĊĠĠĠ Ġval Ġtarget Ġ= ĠArrayList < T >( size ) ĊĠĠĠ Ġfast ForEach Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġselector ( e ) ĊĠĠĠĠĠĠĠ Ġif Ġ( set . add ( key )) Ġtarget Ġ+= Ġe ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtarget Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġfirst Ġelement Ġyield ing Ġthe Ġlargest Ġvalue Ġof Ġthe Ġgiven Ġfunction Ġor Ġ` null ` Ġif Ġthere Ċ Ġ* Ġare Ġno Ġelements . Ċ Ġ* Ċ Ġ* Ġ** Do Ġnot Ġuse Ġfor Ġcollections Ġthat Ġcome Ġfrom Ġpublic ĠAPIs **, Ġsince Ġthey Ġmay Ġnot Ġsupport Ġrandom Ċ Ġ* Ġaccess Ġin Ġan Ġefficient Ġway , Ġand Ġthis Ġmethod Ġmay Ġactually Ġbe Ġa Ġlot Ġslower . ĠOnly Ġuse Ġfor Ċ Ġ* Ġcollections Ġthat Ġare Ġcreated Ġby Ġcode Ġwe Ġcontrol Ġand Ġare Ġknown Ġto Ġsupport Ġrandom Ġaccess . Ċ Ġ*/ Ċ @ Opt In ( Experimental Contracts :: class ) Ċ internal Ġinline Ġfun Ġ< T , ĠR Ġ: ĠComparable < R >> ĠList < T >. fast Min By OrNull ( selector : Ġ( T ) Ġ-> ĠR ): ĠT ? Ġ{ ĊĠĠĠ Ġcontract Ġ{ Ġcalls In Place ( selector ) Ġ} ĊĠĠĠ Ġif Ġ( isEmpty ()) Ġreturn Ġnull ĊĠĠĠ Ġvar Ġmin Elem Ġ= Ġget ( 0 ) ĊĠĠĠ Ġvar Ġmin Value Ġ= Ġselector ( min Elem ) ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. last Index ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġget ( i ) ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġselector ( e ) ĊĠĠĠĠĠĠĠ Ġif Ġ( min Value Ġ> Ġv ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Elem Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Value Ġ= Ġv ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġmin Elem Ċ } Ċ Ċ /** Ċ Ġ* ĠAcc umul ates Ġvalue Ġstarting Ġwith Ġ[ initial ] Ġvalue Ġand Ġapplying Ġ[ operation ] Ġfrom Ġleft Ġto Ġright Ċ Ġ* Ġto Ġcurrent Ġaccumulator Ġvalue Ġand Ġeach Ġelement . Ċ Ġ* Ċ Ġ* ĠReturns Ġthe Ġspecified Ġ[ initial ] Ġvalue Ġif Ġthe Ġcollection Ġis Ġempty . Ċ Ġ* Ċ Ġ* Ġ** Do Ġnot Ġuse Ġfor Ġcollections Ġthat Ġcome Ġfrom Ġpublic ĠAPIs **, Ġsince Ġthey Ġmay Ġnot Ġsupport Ġrandom Ċ Ġ* Ġaccess Ġin Ġan Ġefficient Ġway , Ġand Ġthis Ġmethod Ġmay Ġactually Ġbe Ġa Ġlot Ġslower . ĠOnly Ġuse Ġfor Ċ Ġ* Ġcollections Ġthat Ġare Ġcreated Ġby Ġcode Ġwe Ġcontrol Ġand Ġare Ġknown Ġto Ġsupport Ġrandom Ġaccess . Ċ Ġ* Ċ Ġ* Ġ@ param Ġ[ operation ] Ġfunction Ġthat Ġtakes Ġcurrent Ġaccumulator Ġvalue Ġand Ġan Ġelement , Ġand Ġcalculates Ċ Ġ* Ġthe Ġnext Ġaccumulator Ġvalue . Ċ Ġ*/ Ċ @ Opt In ( Experimental Contracts :: class ) Ċ internal Ġinline Ġfun Ġ< T , ĠR > ĠList < T >. fast Fold ( initial : ĠR , Ġoperation : Ġ( acc : ĠR , ĠT ) Ġ-> ĠR ): ĠR Ġ{ ĊĠĠĠ Ġcontract Ġ{ Ġcalls In Place ( operation ) Ġ} ĊĠĠĠ Ġvar Ġaccumulator Ġ= Ġinitial ĊĠĠĠ Ġfast ForEach Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠ Ġaccumulator Ġ= Ġoperation ( accumulator , Ġe ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġaccumulator Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġsingle Ġlist Ġof Ġall Ġelements Ġy ielded Ġfrom Ġresults Ġof Ġ[ transform ] Ġfunction Ġbeing Ġinvoked Ċ Ġ* Ġon Ġeach Ġelement Ġof Ġoriginal Ġcollection . Ċ Ġ* Ċ Ġ* Ġ** Do Ġnot Ġuse Ġfor Ġcollections Ġthat Ġcome Ġfrom Ġpublic ĠAPIs **, Ġsince Ġthey Ġmay Ġnot Ġsupport Ġrandom Ċ Ġ* Ġaccess Ġin Ġan Ġefficient Ġway , Ġand Ġthis Ġmethod Ġmay Ġactually Ġbe Ġa Ġlot Ġslower . ĠOnly Ġuse Ġfor Ċ Ġ* Ġcollections Ġthat Ġare Ġcreated Ġby Ġcode Ġwe Ġcontrol Ġand Ġare Ġknown Ġto Ġsupport Ġrandom Ġaccess . Ċ Ġ*/ Ċ @ Opt In ( Experimental Contracts :: class ) Ċ internal Ġinline Ġfun Ġ< T , ĠR > ĠList < T >. fast Flat Map ( transform : Ġ( T ) Ġ-> ĠIterable < R >): ĠList < R > Ġ{ ĊĠĠĠ Ġcontract Ġ{ Ġcalls In Place ( transform ) Ġ} ĊĠĠĠ Ġval Ġtarget Ġ= ĠArrayList < R >( size ) ĊĠĠĠ Ġfast ForEach Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġtransform ( e ) ĊĠĠĠĠĠĠĠ Ġtarget . addAll ( list ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtarget Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlist Ġcontaining Ġall Ġelements Ġnot Ġmatching Ġthe Ġgiven Ġ[ predicate ]. Ċ Ġ* Ċ Ġ* Ġ** Do Ġnot Ġuse Ġfor Ġcollections Ġthat Ġcome Ġfrom Ġpublic ĠAPIs **, Ġsince Ġthey Ġmay Ġnot Ġsupport Ġrandom Ċ Ġ* Ġaccess Ġin Ġan Ġefficient Ġway , Ġand Ġthis Ġmethod Ġmay Ġactually Ġbe Ġa Ġlot Ġslower . ĠOnly Ġuse Ġfor Ċ Ġ* Ġcollections Ġthat Ġare Ġcreated Ġby Ġcode Ġwe Ġcontrol Ġand Ġare Ġknown Ġto Ġsupport Ġrandom Ġaccess . Ċ Ġ*/ Ċ @ Opt In ( Experimental Contracts :: class ) Ċ internal Ġinline Ġfun Ġ< T > ĠList < T >. fast Filter Not ( predicate : Ġ( T ) Ġ-> ĠBoolean ): ĠList < T > Ġ{ ĊĠĠĠ Ġcontract Ġ{ Ġcalls In Place ( predicate ) Ġ} ĊĠĠĠ Ġval Ġtarget Ġ= ĠArrayList < T >( size ) ĊĠĠĠ Ġfast ForEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! predicate ( it )) Ġtarget Ġ+= Ġ( it ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtarget Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlist Ġcontaining Ġall Ġelements Ġthat Ġare Ġnot Ġnull Ċ Ġ* Ċ Ġ* Ġ** Do Ġnot Ġuse Ġfor Ġcollections Ġthat Ġcome Ġfrom Ġpublic ĠAPIs **, Ġsince Ġthey Ġmay Ġnot Ġsupport Ġrandom Ċ Ġ* Ġaccess Ġin Ġan Ġefficient Ġway , Ġand Ġthis Ġmethod Ġmay Ġactually Ġbe Ġa Ġlot Ġslower . ĠOnly Ġuse Ġfor Ċ Ġ* Ġcollections Ġthat Ġare Ġcreated Ġby Ġcode Ġwe Ġcontrol Ġand Ġare Ġknown Ġto Ġsupport Ġrandom Ġaccess . Ċ Ġ*/ Ċ @ Opt In ( Experimental Contracts :: class ) Ċ internal Ġfun Ġ< T Ġ: ĠAny > ĠList < T ?> . fast Filter NotNull (): ĠList < T > Ġ{ ĊĠĠĠ Ġval Ġtarget Ġ= ĠArrayList < T >( size ) ĊĠĠĠ Ġfast ForEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(( it ) Ġ!= Ġnull ) Ġtarget Ġ+= Ġ( it ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtarget Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlist Ġcontaining Ġthe Ġfirst Ġelements Ġsatisf ying Ġthe Ġgiven Ġ[ predicate ]. Ċ Ġ* Ċ Ġ* Ġ** Do Ġnot Ġuse Ġfor Ġcollections Ġthat Ġcome Ġfrom Ġpublic ĠAPIs **, Ġsince Ġthey Ġmay Ġnot Ġsupport Ġrandom Ċ Ġ* Ġaccess Ġin Ġan Ġefficient Ġway , Ġand Ġthis Ġmethod Ġmay Ġactually Ġbe Ġa Ġlot Ġslower . ĠOnly Ġuse Ġfor Ċ Ġ* Ġcollections Ġthat Ġare Ġcreated Ġby Ġcode Ġwe Ġcontrol Ġand Ġare Ġknown Ġto Ġsupport Ġrandom Ġaccess . Ċ Ġ*/ Ċ @ Opt In ( Experimental Contracts :: class ) Ċ internal Ġinline Ġfun Ġ< T > ĠList < T >. fast Take While ( predicate : Ġ( T ) Ġ-> ĠBoolean ): ĠList < T > Ġ{ ĊĠĠĠ Ġcontract Ġ{ Ġcalls In Place ( predicate ) Ġ} ĊĠĠĠ Ġval Ġtarget Ġ= ĠArrayList < T >( size ) ĊĠĠĠ Ġfor Ġ( i Ġin Ġindices ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġget ( i ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! predicate ( item )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġtarget Ġ+= Ġitem ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtarget Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlist Ġcontaining Ġall Ġelements Ġexcept Ġfirst Ġ[ n ] Ġelements . Ċ Ġ* Ċ Ġ* Ġ** Do Ġnot Ġuse Ġfor Ġcollections Ġthat Ġcome Ġfrom Ġpublic ĠAPIs **, Ġsince Ġthey Ġmay Ġnot Ġsupport Ġrandom Ċ Ġ* Ġaccess Ġin Ġan Ġefficient Ġway , Ġand Ġthis Ġmethod Ġmay Ġactually Ġbe Ġa Ġlot Ġslower . ĠOnly Ġuse Ġfor Ċ Ġ* Ġcollections Ġthat Ġare Ġcreated Ġby Ġcode Ġwe Ġcontrol Ġand Ġare Ġknown Ġto Ġsupport Ġrandom Ġaccess . Ċ Ġ* Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġ[ n ] Ġis Ġnegative . Ċ Ġ*/ Ċ internal Ġfun Ġ< T > ĠList < T >. fast Drop ( n : ĠInt ): ĠList < T > Ġ{ ĊĠĠĠ Ġrequire ( n Ġ>= Ġ 0 ) Ġ{ Ġ" Requested Ġelement Ġcount Ġ$ n Ġis Ġless Ġthan Ġzero ." Ġ} ĊĠĠĠ Ġif Ġ( n Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġresult Size Ġ= Ġsize Ġ- Ġn ĊĠĠĠ Ġif Ġ( result Size Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( result Size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( last ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġtarget Ġ= ĠArrayList < T >( result Size ) ĊĠĠĠ Ġfor Ġ( index Ġin Ġn Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtarget Ġ+= Ġget ( index ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtarget Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġstring Ġfrom Ġall Ġthe Ġelements Ġseparated Ġusing Ġ[ separator ] Ġand Ġusing Ġthe Ġgiven Ġ[ prefix ] Ċ Ġ* Ġand Ġ[ postfix ] Ġif Ġsupplied . Ċ Ġ* Ċ Ġ* ĠIf Ġthe Ġcollection Ġcould Ġbe Ġhuge , Ġyou Ġcan Ġspecify Ġa Ġnon - negative Ġvalue Ġof Ġ[ limit ], Ġin Ġwhich Ġcase Ċ Ġ* Ġonly Ġthe Ġfirst Ġ[ limit ] Ġelements Ġwill Ġbe Ġappended , Ġfollowed Ġby Ġthe Ġ[ tr uncated ] Ġstring Ġ( which Ċ Ġ* Ġdefaults Ġto Ġ"... "). Ċ Ġ* Ċ Ġ* Ġ** Do Ġnot Ġuse Ġfor Ġcollections Ġthat Ġcome Ġfrom Ġpublic ĠAPIs **, Ġsince Ġthey Ġmay Ġnot Ġsupport Ġrandom Ċ Ġ* Ġaccess Ġin Ġan Ġefficient Ġway , Ġand Ġthis Ġmethod Ġmay Ġactually Ġbe Ġa Ġlot Ġslower . ĠOnly Ġuse Ġfor Ċ Ġ* Ġcollections Ġthat Ġare Ġcreated Ġby Ġcode Ġwe Ġcontrol Ġand Ġare Ġknown Ġto Ġsupport Ġrandom Ġaccess . Ċ Ġ*/ Ċ internal Ġfun Ġ< T > ĠList < T >. fast Join ToString ( ĊĠĠĠ Ġseparator : ĠCharSequence Ġ= Ġ", Ġ", ĊĠĠĠ Ġprefix : ĠCharSequence Ġ= Ġ"", ĊĠĠĠ Ġpostfix : ĠCharSequence Ġ= Ġ"", ĊĠĠĠ Ġlimit : ĠInt Ġ= Ġ- 1 , ĊĠĠĠ Ġtruncated : ĠCharSequence Ġ= Ġ"... ", ĊĠĠĠ Ġtransform : Ġ(( T ) Ġ-> ĠCharSequence )? Ġ= Ġnull Ċ ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġfast Join To ( StringBuilder (), Ġseparator , Ġprefix , Ġpostfix , Ġlimit , Ġtruncated , Ġtransform ) ĊĠĠĠĠĠĠĠ Ġ. toString () Ċ } Ċ Ċ /** Ċ Ġ* ĠApp ends Ġthe Ġstring Ġfrom Ġall Ġthe Ġelements Ġseparated Ġusing Ġ[ separator ] Ġand Ġusing Ġthe Ġgiven Ċ Ġ* Ġ[ prefix ] Ġand Ġ[ postfix ] Ġif Ġsupplied . Ċ Ġ* Ċ Ġ* ĠIf Ġthe Ġcollection Ġcould Ġbe Ġhuge , Ġyou Ġcan Ġspecify Ġa Ġnon - negative Ġvalue Ġof Ġ[ limit ], Ġin Ġwhich Ċ Ġ* Ġcase Ġonly Ġthe Ġfirst Ġ[ limit ] Ġelements Ġwill Ġbe Ġappended , Ġfollowed Ġby Ġthe Ġ[ tr uncated ] Ġstring Ċ Ġ* Ġ( which Ġdefaults Ġto Ġ"... "). Ċ Ġ* Ċ Ġ* Ġ** Do Ġnot Ġuse Ġfor Ġcollections Ġthat Ġcome Ġfrom Ġpublic ĠAPIs **, Ġsince Ġthey Ġmay Ġnot Ġsupport Ġrandom Ċ Ġ* Ġaccess Ġin Ġan Ġefficient Ġway , Ġand Ġthis Ġmethod Ġmay Ġactually Ġbe Ġa Ġlot Ġslower . ĠOnly Ġuse Ġfor Ċ Ġ* Ġcollections Ġthat Ġare Ġcreated Ġby Ġcode Ġwe Ġcontrol Ġand Ġare Ġknown Ġto Ġsupport Ġrandom Ġaccess . Ċ Ġ*/ Ċ private Ġfun Ġ< T , ĠA Ġ: ĠAppend able > ĠList < T >. fast Join To ( ĊĠĠĠ Ġbuffer : ĠA , ĊĠĠĠ Ġseparator : ĠCharSequence Ġ= Ġ", Ġ", ĊĠĠĠ Ġprefix : ĠCharSequence Ġ= Ġ"", ĊĠĠĠ Ġpostfix : ĠCharSequence Ġ= Ġ"", ĊĠĠĠ Ġlimit : ĠInt Ġ= Ġ- 1 , ĊĠĠĠ Ġtruncated : ĠCharSequence Ġ= Ġ"... ", ĊĠĠĠ Ġtransform : Ġ(( T ) Ġ-> ĠCharSequence )? Ġ= Ġnull Ċ ): ĠA Ġ{ ĊĠĠĠ Ġbuffer . append ( prefix ) ĊĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( index Ġin Ġindices ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġget ( index ) ĊĠĠĠĠĠĠĠ Ġif Ġ(++ count Ġ> Ġ 1 ) Ġbuffer . append ( separator ) ĊĠĠĠĠĠĠĠ Ġif Ġ( limit Ġ< Ġ 0 Ġ|| Ġcount Ġ<= Ġlimit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . append Element ( element , Ġtransform ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġbreak ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( limit Ġ>= Ġ 0 Ġ&& Ġcount Ġ> Ġlimit ) Ġbuffer . append ( tr uncated ) ĊĠĠĠ Ġbuffer . append ( postfix ) ĊĠĠĠ Ġreturn Ġbuffer Ċ } Ċ Ċ /** Ċ Ġ* ĠCop ied Ġfrom ĠAppend able . kt Ċ Ġ*/ Ċ private Ġfun Ġ< T > ĠAppend able . append Element ( element : ĠT , Ġtransform : Ġ(( T ) Ġ-> ĠCharSequence )? ) Ġ{ ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġtransform Ġ!= Ġnull Ġ-> Ġappend ( transform ( element )) ĊĠĠĠĠĠĠĠ Ġelement Ġis ĠCharSequence ? Ġ-> Ġappend ( element ) ĊĠĠĠĠĠĠĠ Ġelement Ġis ĠChar Ġ-> Ġappend ( element ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġappend ( element . toString ()) ĊĠĠĠ Ġ} Ċ } Ċ