package Ġkotlin Ċ Ċ import Ġkotlin . support .* Ċ import Ġjava . util . Collections Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġiterator Ġwhich Ġinvokes Ġthe Ġfunction Ġto Ġcalculate Ġthe Ġnext Ġvalue Ġon Ġeach Ġiteration Ġuntil Ġthe Ġfunction Ġreturns Ġ* null * Ċ Ġ* Ċ Ġ* Ġ@ include Function Body Ġ../../ test / iter ators / Iter ators Test . kt Ġfib onacci Ċ Ġ*/ Ċ public Ġinline Ġfun Ġ< T > Ġiterate ( next Function : Ġ() Ġ-> ĠT ?) Ġ: Ġjava . util . Iterator < T > Ġ= ĠFunction Iterator ( next Function ) Ċ Ċ /** ĠReturns Ġan Ġiterator Ġover Ġelements Ġthat Ġare Ġinstances Ġof Ġa Ġgiven Ġtype Ġ* R * Ġwhich Ġis Ġa Ġsubclass Ġof Ġ* T * Ġ*/ Ċ public Ġinline Ġfun Ġ< T , ĠR : ĠT > Ġjava . util . Iterator < T >. filter Is Instance ( klass : ĠClass < R >): Ġjava . util . Iterator < R > Ġ= ĠFilter Is Iterator < T , R >( this , Ġklass ) Ċ Ċ private Ġclass ĠFilter Is Iterator < T , ĠR Ġ: T >( val Ġiterator Ġ: Ġjava . util . Iterator < T >, Ġval Ġklass : ĠClass < R >) Ġ: ĠAbstract Iterator < R >() Ġ{ ĊĠĠĠ Ġoverride Ġprotected Ġfun Ġcompute Next (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( klass . is Instance ( next )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Next ( next Ġas ĠR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdone () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġiterator Ġover Ġelements Ġwhich Ġmatch Ġthe Ġgiven Ġ* predicate * Ċ Ġ* Ċ Ġ* Ġ@ include Function Body Ġ../../ test / iter ators / Iter ators Test . kt Ġfilter And Take While Extract The Elements Within Range Ċ Ġ*/ Ċ public Ġinline Ġfun Ġ< T > Ġjava . util . Iterator < T >. filter ( predicate : Ġ( T ) Ġ-> ĠBoolean ) Ġ: Ġjava . util . Iterator < T > Ġ= ĠFilter Iterator < T >( this , Ġpredicate ) Ċ Ċ private Ġclass ĠFilter Iterator < T >( val Ġiterator Ġ: Ġjava . util . Iterator < T >, Ġval Ġpredicate : Ġ( T )-> ĠBoolean ) Ġ: ĠAbstract Iterator < T >() Ġ{ ĊĠĠĠ Ġoverride Ġprotected Ġfun Ġcompute Next (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( predicate )( next )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Next ( next ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdone () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** ĠReturns Ġan Ġiterator Ġover Ġelements Ġwhich Ġdo Ġnot Ġmatch Ġthe Ġgiven Ġ* predicate * Ġ*/ Ċ public Ġinline Ġfun Ġ< T > Ġjava . util . Iterator < T >. filter Not ( predicate : Ġ( T ) Ġ-> ĠBoolean ) Ġ: Ġjava . util . Iterator < T > Ġ= Ġfilter Ġ{ Ġ! predicate ( it ) Ġ} Ċ Ċ /** ĠReturns Ġan Ġiterator Ġover Ġnon -* null * Ġelements Ġ*/ Ċ public Ġinline Ġfun Ġ< T > Ġjava . util . Iterator < T ?> ?. filter NotNull () Ġ: Ġjava . util . Iterator < T > Ġ= ĠFilter NotNull Iterator ( this ) Ċ Ċ private Ġclass ĠFilter NotNull Iterator < T >( val Ġiterator Ġ: Ġjava . util . Iterator < T ?> ?) Ġ: ĠAbstract Iterator < T >() Ġ{ ĊĠĠĠ Ġoverride Ġprotected Ġfun Ġcompute Next (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( iterator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Next ( next ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdone () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġiterator Ġobtained Ġby Ġapplying Ġ* transform *, Ġa Ġfunction Ġtransform ing Ġan Ġobject Ġof Ġtype Ġ* T * Ġinto Ġan Ġobject Ġof Ġtype Ġ* R * Ċ Ġ* Ċ Ġ* Ġ@ include Function Body Ġ../../ test / iter ators / Iter ators Test . kt Ġmap And Take While Extract The Trans formed Elements Ċ Ġ*/ Ċ public Ġinline Ġfun Ġ< T , ĠR > Ġjava . util . Iterator < T >. map ( transform : Ġ( T ) Ġ-> ĠR ): Ġjava . util . Iterator < R > Ġ= ĠMap Iterator < T , ĠR >( this , Ġtransform ) Ċ Ċ private Ġclass ĠMap Iterator < T , ĠR >( val Ġiterator Ġ: Ġjava . util . Iterator < T >, Ġval Ġtransform : Ġ( T ) Ġ-> ĠR ) Ġ: ĠAbstract Iterator < R >() Ġ{ ĊĠĠĠ Ġoverride Ġprotected Ġfun Ġcompute Next () Ġ: ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Next (( transform )( iterator . next ())) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdone () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġiterator Ġover Ġthe Ġconcaten ated Ġresults Ġof Ġtransform ing Ġeach Ġelement Ġto Ġone Ġor Ġmore Ġvalues Ċ Ġ* Ċ Ġ* Ġ@ include Function Body Ġ../../ test / iter ators / Iter ators Test . kt Ġflat Map And Take Extract The Trans formed Elements Ċ Ġ*/ Ċ public Ġinline Ġfun Ġ< T , ĠR > Ġjava . util . Iterator < T >. flatMap ( transform : Ġ( T ) Ġ-> Ġjava . util . Iterator < R >): Ġjava . util . Iterator < R > Ġ= ĠFlat Map Iterator < T , ĠR >( this , Ġtransform ) Ċ Ċ private Ġclass ĠFlat Map Iterator < T , ĠR >( val Ġiterator Ġ: Ġjava . util . Iterator < T >, Ġval Ġtransform : Ġ( T ) Ġ-> Ġjava . util . Iterator < R >) Ġ: ĠAbstract Iterator < R >() Ġ{ ĊĠĠĠ Ġvar Ġtransformed : Ġjava . util . Iterator < R > Ġ= Ġiterate < R > Ġ{ Ġnull Ġ} ĊĊĠĠĠ Ġoverride Ġprotected Ġfun Ġcompute Next () Ġ: ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transformed . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Next ( transformed . next ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransformed Ġ= Ġ( transform )( iterator . next ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġan Ġ[[ Iterator ]] Ġwhich Ġiter ates Ġover Ġthis Ġiterator Ġthen Ġthe Ġgiven Ġelement Ġat Ġthe Ġend Ċ Ġ* Ċ Ġ* Ġ@ include Function Body Ġ../../ test / iter ators / Iter ators Test . kt Ġplus Ċ Ġ*/ Ċ public Ġinline Ġfun Ġ< in ĠT > Ġjava . util . Iterator < T >. plus ( element : ĠT ): Ġjava . util . Iterator < T > Ġ{ ĊĠĠĠ Ġreturn ĠComposite Iterator < T >( this , ĠSingle Iterator ( element )) Ċ } ĊĊ Ċ /** Ċ Ġ* ĠCreates Ġan Ġ[[ Iterator ]] Ġwhich Ġiter ates Ġover Ġthis Ġiterator Ġthen Ġthe Ġfollowing Ġiterator Ċ Ġ* Ċ Ġ* Ġ@ include Function Body Ġ../../ test / iter ators / Iter ators Test . kt Ġplus Collection Ċ Ġ*/ Ċ public Ġinline Ġfun Ġ< in ĠT > Ġjava . util . Iterator < T >. plus ( iterator : Ġjava . util . Iterator < T >): Ġjava . util . Iterator < T > Ġ{ ĊĠĠĠ Ġreturn ĠComposite Iterator < T >( this , Ġiterator ) Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġan Ġ[[ Iterator ]] Ġwhich Ġiter ates Ġover Ġthis Ġiterator Ġthen Ġthe Ġfollowing Ġcollection Ċ Ġ* Ċ Ġ* Ġ@ include Function Body Ġ../../ test / iter ators / Iter ators Test . kt Ġplus Collection Ċ Ġ*/ Ċ public Ġinline Ġfun Ġ< in ĠT > Ġjava . util . Iterator < T >. plus ( collection : Ġjava . lang . Iterable < T >): Ġjava . util . Iterator < T > Ġ= Ġplus ( collection . iterator ()) Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġiterator Ġcontaining Ġall Ġthe Ġnon -* null * Ġelements , Ġl az ily Ġthrowing Ġan Ġ[[ IllegalArgumentException ]] Ċ Ġif Ġthere Ġare Ġany Ġnull Ġelements Ċ Ġ* Ċ Ġ* Ġ@ include Function Body Ġ../../ test / iter ators / Iter ators Test . kt Ġrequire No Null s Ċ Ġ*/ Ċ public Ġinline Ġfun Ġ< in ĠT > Ġjava . util . Iterator < T ?> . require No Null s (): Ġjava . util . Iterator < T > Ġ{ ĊĠĠĠ Ġreturn Ġmap < T ?, ĠT >{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ) Ġthrow ĠIllegalArgumentException (" null Ġelement Ġin Ġiterator Ġ$ this ") Ġelse Ġit ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* ĠReturns Ġan Ġiterator Ġrestricted Ġto Ġthe Ġfirst Ġ* n * Ġelements Ċ Ġ* Ċ Ġ* Ġ@ include Function Body Ġ../../ test / iter ators / Iter ators Test . kt Ġtake Extract s The First N Elements Ċ Ġ*/ Ċ public Ġinline Ġfun Ġ< T > Ġjava . util . Iterator < T >. take ( n : ĠInt ): Ġjava . util . Iterator < T > Ġ{ ĊĠĠĠ Ġvar Ġcount Ġ= Ġn ĊĠĠĠ Ġreturn Ġtake While { Ġ-- count Ġ>= Ġ 0 Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġiterator Ġrestricted Ġto Ġthe Ġfirst Ġelements Ġthat Ġmatch Ġthe Ġgiven Ġ* predicate * Ċ Ġ* Ċ Ġ* Ġ@ include Function Body Ġ../../ test / iter ators / Iter ators Test . kt Ġfilter And Take While Extract The Elements Within Range Ċ Ġ*/ Ċ public Ġinline Ġfun Ġ< T > Ġjava . util . Iterator < T >. take While ( predicate : Ġ( T ) Ġ-> ĠBoolean ): Ġjava . util . Iterator < T > Ġ= ĠTake While Iterator < T >( this , Ġpredicate ) Ċ Ċ private Ġclass ĠTake While Iterator < T >( val Ġiterator : Ġjava . util . Iterator < T >, Ġval Ġpredicate : Ġ( T ) Ġ-> ĠBoolean ) Ġ: ĠAbstract Iterator < T >() Ġ{ ĊĠĠĠ Ġoverride Ġprotected Ġfun Ġcompute Next () Ġ: ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( predicate )( item )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Next ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdone () ĊĠĠĠ Ġ} Ċ } Ċ