package Ġorg . kol le kt ions . transform ations Ċ Ċ import Ġorg . kol le kt ions . consum ers . Consumer Ċ import Ġorg . kol le kt ions . consum ers . Consumer Builder Ċ Ċ class ĠFilter Consumer < T >( val Ġfilter : Ġ( value : ĠT ) Ġ-> ĠBoolean , Ġval Ġinner Consumer : ĠConsumer < T >) Ġ: ĠConsumer < T > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġprocess ( value : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( filter ( value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Consumer . process ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresults () Ġ= Ġinner Consumer . results () ĊĊĠĠĠ Ġoverride Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġinner Consumer . stop () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠCh ained Filter Consumer Builder < T , ĠV >( val Ġprevious Builder : ĠConsumer Builder < T , ĠV >, Ġval Ġfilter : Ġ( value : ĠV ) Ġ-> ĠBoolean ): ĠConsumer Builder < T , ĠV > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġbuild ( inner Consumer : ĠConsumer < V >): ĠConsumer < T > Ġ= Ġprevious Builder . build ( Filter Consumer ( filter , Ġinner Consumer )) Ċ } Ċ Ċ class ĠFilter Consumer Builder < T >( val Ġfilter : Ġ( value : ĠT ) Ġ-> ĠBoolean ): ĠConsumer Builder < T , ĠT > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġbuild ( inner Consumer : ĠConsumer < T >): ĠConsumer < T > Ġ= ĠFilter Consumer ( filter , Ġinner Consumer ) Ċ } Ċ Ċ fun < T , ĠV > ĠConsumer Builder < T , ĠV >. filter On ( filter : Ġ( value : ĠV ) Ġ-> ĠBoolean ) Ġ= ĠCh ained Filter Consumer Builder ( this , Ġfilter ) Ċ Ċ fun < T > Ġfilter On ( filter : Ġ( value : ĠT ) Ġ-> ĠBoolean ) Ġ= ĠFilter Consumer Builder ( filter ) Ċ