package Ġcom . w inter be . kotlin . sequences Ċ Ċ import Ġorg . junit . Test Ċ Ċ class ĠAdvanced Examples Ġ{ ĊĊĠĠĠ Ġdata Ġclass ĠPerson ( val Ġname : ĠString , Ġval Ġage : ĠInt ) ĊĊĠĠĠ Ġprivate Ġval Ġpersons Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠPerson (" P eter ", Ġ 1 6 ), ĊĠĠĠĠĠĠĠ ĠPerson (" An na ", Ġ 2 8 ), ĊĠĠĠĠĠĠĠ ĠPerson (" An na ", Ġ 2 3 ), ĊĠĠĠĠĠĠĠ ĠPerson (" S ony a ", Ġ 3 9 ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` reduce Ġsequence Ġof Ġnumbers Ġinto Ġdigit Ġsum `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsequence Of ( 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. reduce Ġ{ Ġacc , Ġnum Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc Ġ+ Ġnum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprint ( result ) ĠĠ Ġ// Ġ 1 5 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġflat Map () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsequence Of ( listOf ( 1 , Ġ 2 , Ġ 3 ), ĠlistOf ( 4 , Ġ 5 , Ġ 6 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . as Sequence (). filter Ġ{ Ġit Ġ% Ġ 2 Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠĠĠĠĠ Ġprint ( result ) ĠĠ Ġ// Ġ[ 1 , Ġ 3 , Ġ 5 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` flatten Ġelements `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsequence Of ( listOf ( 1 , Ġ 2 , Ġ 3 ), ĠlistOf ( 4 , Ġ 5 , Ġ 6 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatten () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠĠĠĠĠ Ġprint ( result ) ĠĠ Ġ// Ġ[ 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 , Ġ 6 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` associate Ġby Ġa Ġgiven Ġproperty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpersons ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. associate By Ġ{ Ġit . name Ġ} ĊĊĠĠĠĠĠĠĠ Ġprint ( result ) ĠĠ Ġ// Ġ{ P eter = Person ( name = P eter , Ġage = 1 6 ), ĠAn na = Person ( name = An na , Ġage = 2 3 ), ĠS ony a = Person ( name = S ony a , Ġage = 3 9 )} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` group Ġby Ġa Ġgiven Ġproperty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpersons ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . name Ġ} ĊĊĠĠĠĠĠĠĠ Ġprint ( result ) ĠĠ Ġ// Ġ{ P eter =[ Person ( name = P eter , Ġage = 1 6 )], ĠAn na =[ Person ( name = An na , Ġage = 2 8 ), ĠPerson ( name = An na , Ġage = 2 3 )], ĠS ony a =[ Person ( name = S ony a , Ġage = 3 9 )] } ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` any Ġmatches Ġpredicate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsequence Of ( 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ% Ġ 2 Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. any Ġ{ Ġit Ġ% Ġ 2 Ġ== Ġ 0 Ġ} ĊĊĠĠĠĠĠĠĠ Ġprint ( result ) ĠĠ Ġ// Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` map Ġsequences `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" c " Ġto Ġ 3 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . value Ġ< Ġ 2 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . key Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. single () ĊĊĠĠĠĠĠĠĠ Ġprint ( result ) ĠĠ Ġ// Ġa ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sort Ġby Ġproperty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpersons ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . age Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠĠĠĠĠ Ġprint ( result ) ĠĠ Ġ// Ġ[ Person ( name = P eter , Ġage = 1 6 ), ĠPerson ( name = An na , Ġage = 2 3 ), ĠPerson ( name = An na , Ġage = 2 8 ), ĠPerson ( name = S ony a , Ġage = 3 9 )] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` distinct Ġby Ġproperty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpersons ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠĠĠĠĠ Ġprint ( result ) ĠĠ Ġ// Ġ[ Person ( name = P eter , Ġage = 1 6 ), ĠPerson ( name = An na , Ġage = 2 8 ), ĠPerson ( name = S ony a , Ġage = 3 9 )] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` max Ġby Ġproperty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpersons ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. max By Ġ{ Ġit . age Ġ} ĊĊĠĠĠĠĠĠĠ Ġprint ( result ) ĠĠ Ġ// ĠPerson ( name = S ony a , Ġage = 3 9 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` operate Ġon Ġelement Ġindices `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsequence Of (" a ", Ġ" b ", Ġ" c ", Ġ" d ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Index () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . index Ġ% Ġ 2 Ġ== Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . value Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠĠĠĠĠ Ġprint ( result ) ĠĠ Ġ// Ġ[ a , Ġc ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` add Ġand Ġremove Ġelements Ġfrom Ġsequence `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsequence Of (" a ", Ġ" b ", Ġ" c ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus (" d ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. minus (" c ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . toUpperCase () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠĠĠĠĠ Ġprint ( result ) ĠĠ Ġ// Ġ[ A , ĠB , ĠD ] ĊĠĠĠ Ġ} Ċ Ċ }