package Ġnn l . ro cks . k act o os . iterator Ċ Ċ import Ġnn l . ro cks . k act o os . Func Ċ import Ġnn l . ro cks . k act o os . K Func Ċ import Ġnn l . ro cks . k act o os . internal . Temporary Ċ import Ġnn l . ro cks . k act o os . internal . isEmpty Ċ Ċ /** Ċ Ġ* ĠFilter ed Ġiterator . Ċ Ġ* Ċ Ġ* ĠYou Ġcan Ġuse Ġit Ġin Ġorder Ġto Ġcreate Ġa Ġdecl arative / lazy Ċ Ġ* Ġversion Ġof Ġa Ġfiltered Ġcollection / iterable . ĠFor Ġexample , Ċ Ġ* Ġthis Ġcode Ġwill Ġcreate Ġa Ġlist Ġof Ġtwo Ġstrings Ġ" red " Ġand Ġ" fox ": Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġval Ġfiltered Ġ= ĠFilter ed ( Ċ Ġ* ĠĠĠĠ Ġ{ Ġinput Ġ-> Ġinput . length Ġ< Ġ 4 Ġ}, Ċ Ġ* ĠĠĠĠ ĠIterator Of (" red ", Ġ" lazy ", Ġ" fox ") Ċ Ġ* Ġ) Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠThere Ġis Ġno Ġthread - safety Ġguarantee . Ċ Ġ* Ċ Ġ* Ġ@ param ĠX ĠType Ġof Ġitem Ċ Ġ* Ġ@ since Ġ 0 . 1 Ċ Ġ*/ Ċ class ĠFilter ed < out ĠX Ġ: ĠAny > Ġprivate Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġiterator : ĠIterator < X >, ĊĠĠĠ Ġprivate Ġval Ġpredicate : ĠK Func < X , ĠBoolean >, ĊĠĠĠ Ġprivate Ġval Ġbuffer : ĠTemporary < X > Ċ ) Ġ: ĠIterator < X > Ġ{ ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġpredicate : ĠK Func < X , ĠBoolean >, ĊĠĠĠĠĠĠĠ Ġiterator : ĠIterator < X > ĊĠĠĠ Ġ) Ġ: Ġthis ( iterator , Ġpredicate , ĠTemporary ()) ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġpredicate : ĠFunc < X , ĠBoolean >, ĊĠĠĠĠĠĠĠ Ġiterator : ĠIterator < X > ĊĠĠĠ Ġ) Ġ: Ġthis ( iterator , Ġ{ Ġx Ġ-> Ġpredicate . apply ( x ) Ġ}, ĠTemporary ()) ĊĊĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( buffer . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( predicate ( obj )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . put ( obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuffer . isNotEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnext (): ĠX Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisEmpty () Ġ-> Ġthrow ĠNoSuch ElementException (" No Ġmore Ġelements Ġthat Ġfit Ġthe Ġcondition ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġbuffer . poll () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ