// ĠHigh er Ġorder Ġfunction , Ġwe Ġhave Ġan Ġinput Ġas ĠString Ġand Ġreturn ĠBoolean Ċ fun Ġprint Filtered Strings ( list : ĠList < String >, Ġpredicate : Ġ( String ) Ġ-> ĠBoolean ) Ġ{ ĊĠĠĠ Ġlist . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( predicate ( it )) Ġ{ Ġ// Ġcan Ġbe Ġcalled Ġas Ġa Ġregular Ġfunction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġprint Filtered String Nullable ( list : ĠList < String >, Ġpredicate : Ġ(( String ) Ġ-> ĠBoolean )? ) Ġ{ ĊĠĠĠ Ġlist . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( predicate ?. invoke ( it ) Ġ== Ġtrue ) Ġ{ Ġ// Ġcan Ġbe Ġcalled Ġas Ġa Ġregular Ġfunction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ // ĠVariables Ġas Ġfunctions ! Ċ val Ġpredicate : Ġ( String ) Ġ-> ĠBoolean Ġ= Ġ{ ĊĠĠĠ Ġit . startsWith (" J ") Ċ } Ċ // ĠFunction Ġthat Ġreturns Ġanother Ġfunction ! Ċ fun Ġget Print Predicate (): Ġ( String ) Ġ-> ĠBoolean { ĊĠĠĠ Ġreturn Ġ{ it . startsWith (" J ")} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġ// We Ġcan Ġremove Ġthe Ġlambda Ġoutside Ġsince Ġit Ġis Ġa Ġfunction Ġand Ġlast Ġon Ġthe Ġargument Ġlist ĊĠĠĠ Ġval Ġlist Ġ= ĠlistOf (" Kotlin ", Ġ" Java ", Ġ" C ++ ", Ġ" JavaScript ") ĊĊĠĠĠ Ġ// All Ġthe Ġsame ĊĠĠĠ Ġprint Filtered Strings ( list ) Ġ{ Ġit . startsWith (" J ") Ġ} ĊĠĠĠ Ġprint Filtered Strings ( list , predicate ) ĊĠĠĠ Ġprint Filtered Strings ( list , get Print Predicate ()) ĊĊĠĠĠ Ġprint Filtered String Nullable ( list , null ) Ċ Ċ }