/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠT enk iv , ĠInc . Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ċ Ġ* Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ċ Ġ* Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ċ Ġ* Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe Ċ Ġ* ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE Ċ Ġ* ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR Ċ Ġ* ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR Ċ Ġ* ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġorg . ten k iv . cor al Ċ Ċ // TODO ĠAdd Ġan Ġor Null Ġand Ġor Default Ġvariant Ġof Ġthese Ġfunctions . Ċ public Ġinline Ġfun Ġ< E > ĠIterable < E >. average ( getValue : Ġ( E ) Ġ-> ĠDouble ): ĠDouble Ġ{ ĊĠĠĠ Ġvar Ġtotal Value Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠ ĠforEach Ġ{ ĊĠĠĠĠĠĠĠ Ġtotal Value Ġ+= ĠgetValue ( it ) ĊĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġif Ġ( count Ġ== Ġ 0 ) ĠDouble . NaN Ġelse Ġtotal Value Ġ/ Ġcount Ċ } Ċ Ċ @ Deprecated (" Should Ġuse Ġfilter Ġfollowed Ġby Ġaverage Ġinstead .") Ċ public Ġinline Ġfun Ġ< E > ĠIterable < E >. average ( getValue : Ġ( E ) Ġ-> ĠDouble , Ġcondition : Ġ( E ) Ġ-> ĠBoolean ): ĠDouble Ġ{ ĊĠĠĠ Ġvar Ġtotal Value Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠ ĠforEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( condition ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Value Ġ+= ĠgetValue ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġif Ġ( count Ġ== Ġ 0 ) ĠDouble . NaN Ġelse Ġtotal Value Ġ/ Ġcount Ċ } Ċ Ċ /** Ċ Ġ* ĠResult Ġalways Ġgiven Ġto Ġ 1 . ĠSo , Ġfor Ġexample , Ġ 3 Ġto Ġ 1 Ġwould Ġreturn Ġ 3 Ġand Ġ 1 . 5 Ġto Ġ 0 . 5 Ġwould Ġalso Ġreturn Ġ 3 . Ċ Ġ*/ Ċ public Ġinline Ġfun Ġ< E > ĠIterable < E >. ratio ( of : Ġ( E ) Ġ-> ĠDouble , Ġto : Ġ( E ) Ġ-> ĠDouble ): ĠDouble Ġ{ ĊĠĠĠ Ġvar Ġof Total Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġto Total Ġ= Ġ 0 . 0 ĊĠĠĠ ĠforEach Ġ{ ĊĠĠĠĠĠĠĠ Ġof Total Ġ+= Ġof ( it ) ĊĠĠĠĠĠĠĠ Ġto Total Ġ+= Ġto ( it ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġof Total Ġ== Ġ 0 . 0 Ġ&& Ġto Total Ġ== Ġ 0 . 0 Ġ-> ĠDouble . NaN ĊĠĠĠĠĠĠĠ Ġof Total Ġ<= Ġ 0 . 0 Ġ&& Ġto Total Ġ>= Ġ 0 . 0 Ġ-> ĠDouble . NEGATIVE _ INFINITY ĊĠĠĠĠĠĠĠ Ġof Total Ġ>= Ġ 0 . 0 Ġ&& Ġto Total Ġ<= Ġ 0 . 0 Ġ-> ĠDouble . POSITIVE _ INFINITY ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġof Total Ġ/ Ġto Total ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠResult Ġalways Ġgiven Ġto Ġ 1 . ĠSo , Ġfor Ġexample , Ġ 3 Ġto Ġ 1 Ġwould Ġreturn Ġ 3 Ġand Ġ 1 . 5 Ġto Ġ 0 . 5 Ġwould Ġalso Ġreturn Ġ 3 . Ċ Ġ*/ Ċ public Ġinline Ġfun Ġ< E > ĠIterable < E >. boolean Ratio ( of : Ġ( E ) Ġ-> ĠBoolean , Ġto : Ġ( E ) Ġ-> ĠBoolean ): ĠDouble Ġ{ ĊĠĠĠ Ġvar Ġof Total Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġto Total Ġ= Ġ 0 ĊĠĠĠ ĠforEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( of ( it )) Ġof Total ++ ĊĠĠĠĠĠĠĠ Ġif Ġ( to ( it )) Ġto Total ++ ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġof Total Ġ== Ġ 0 Ġ&& Ġto Total Ġ== Ġ 0 Ġ-> ĠDouble . NaN ĊĠĠĠĠĠĠĠ Ġof Total Ġ== Ġ 0 Ġ&& Ġto Total Ġ> Ġ 0 Ġ-> ĠDouble . NEGATIVE _ INFINITY ĊĠĠĠĠĠĠĠ Ġof Total Ġ> Ġ 0 Ġ&& Ġto Total Ġ== Ġ 0 Ġ-> ĠDouble . POSITIVE _ INFINITY ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġof Total Ġ/ Ġto Total . toDouble () ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġinline Ġfun Ġ< E > ĠCollection < E >. ratio To Total ( of : Ġ( E ) Ġ-> ĠDouble , Ġother : Ġ( E ) Ġ-> ĠDouble ): ĠDouble Ġ{ ĊĠĠĠ Ġvar Ġof Total Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġother Total Ġ= Ġ 0 . 0 ĊĠĠĠ ĠforEach Ġ{ ĊĠĠĠĠĠĠĠ Ġof Total Ġ+= Ġof ( it ) ĊĠĠĠĠĠĠĠ Ġother Total Ġ+= Ġother ( it ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġtotal Ġ= Ġof Total Ġ+ Ġother Total ĊĠĠĠ Ġreturn Ġif Ġ( total Ġ== Ġ 0 . 0 ) ĠDouble . NaN Ġelse Ġof Total Ġ/ Ġtotal Ċ } Ċ Ċ public Ġinline Ġfun Ġ< E > ĠCollection < E >. boolean Ratio To Total ( of : Ġ( E ) Ġ-> ĠBoolean , Ġother : Ġ( E ) Ġ-> ĠBoolean ): ĠDouble Ġ{ ĊĠĠĠ Ġvar Ġof Total Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġother Total Ġ= Ġ 0 . 0 ĊĠĠĠ ĠforEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( of ( it )) Ġof Total ++ ĊĠĠĠĠĠĠĠ Ġif Ġ( other ( it )) Ġother Total ++ ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġtotal Ġ= Ġof Total Ġ+ Ġother Total ĊĠĠĠ Ġreturn Ġif Ġ( total Ġ== Ġ 0 . 0 ) ĠDouble . NaN Ġelse Ġof Total Ġ/ Ġtotal Ċ }