// ĠOriginal Ġbug : ĠK T - 5 8 3 4 ĊĊ Ċ private Ġclass ĠDist inct Iterator < T , ĠK >( val Ġsource Ġ: ĠIterator < T >, Ġval Ġkey Selector Ġ: Ġ( T ) Ġ-> ĠK ) Ġ: ĠAbstract Iterator < T >() Ġ{ ĊĠĠĠ Ġprivate Ġval Ġobserved Ġ= ĠHashSet < K >() ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Next () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( source . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġsource . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġkey Selector ( next ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( observed . add ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Next ( next ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġdone () ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠDist inct Sequence < T , ĠK >( val Ġsource Ġ: ĠSequence < T >, Ġval Ġkey Selector Ġ: Ġ( T ) Ġ-> ĠK ) Ġ: ĠSequence < T > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < T > Ġ= ĠDist inct Iterator ( source . iterator (), Ġkey Selector ) Ċ } Ċ Ċ public Ġfun Ġ< T > ĠSequence < T >. distinct () Ġ: ĠSequence < T > Ġ= ĠDist inct Sequence ( this ) Ġ{ it } Ġ Ċ public Ġfun Ġ< T , ĠK > ĠSequence < T >. distinct ( key Selector Ġ: Ġ( T ) Ġ-> ĠK ) Ġ: ĠSequence < T > Ġ= ĠDist inct Sequence ( this , Ġkey Selector ) ĊĊ