package Ġorg . step ic . d roid . util Ċ Ċ import Ġorg . step ic . d roid . model . Course Ċ import Ġorg . step ic . d roid . model . Downloading Video Item Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . util .* Ċ Ċ object ĠKotlin Util Ġ{ ĊĠĠĠ Ġfun Ġfilter IfNot Contains ( list : ĠList < Downloading Video Item >, Ġset : ĠSet < Long >): ĠList < Downloading Video Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġlist . filter Ġ{ Ġ! set . contains ( it . download Entity . step Id ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfilter IfNot Unique ( list : ĠList < Course >): ĠList Ġ< Course > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġlist . distinct By Ġ{ Ġit . course Id Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetList Old Plus Updated ( old List : ĠList < Course >, Ġnew List : ĠList < Course >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġmerge Two Course List ( new List Ġ= Ġnew List , Ġold List Ġ= Ġold List ) ĊĊĠĠĠ Ġfun Ġget N ice Format Of Double ( number : ĠDouble ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġformat Ġ= ĠDecimal Format (" 0 . ## "); ĊĠĠĠĠĠĠĠ Ġreturn Ġformat . format ( number ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// old List Ġshould Ġbe Ġfirst , Ġand Ġafter Ġthat Ġnew List , Ġbut Ġif Ġexists Ġ 2 Ġelements Ġwith Ġthe Ġsame ĠID , Ġget Ġfrom Ġnew List Ġat Ġposition Ġof Ġold List ĊĠĠĠ Ġprivate Ġfun Ġmerge Two Course List ( old List : ĠList < Course >, Ġnew List : ĠList < Course >): ĠList < Course > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhash Map Ġ= Ġnew List . associate By Ġ{ Ġit . course Id Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġused From New Ġ= ĠHashSet < Long >( new List . size ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < Course >( new List . size Ġ+ Ġold List . size ) ĊĠĠĠĠĠĠĠ Ġold List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdated Course : ĠCourse ? Ġ= Ġhash Map [ it . course Id ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( updated Course Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( updated Course ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġused From New . add ( updated Course . course Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// do Ġnot Ġadd Ġused Ġfrom Ġnew ĊĠĠĠĠĠĠĠ Ġnew List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! used From New . contains ( it . course Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< T > Ġset IfNot ( setter : Ġ( T ) Ġ-> ĠUnit , Ġvalue : ĠT , Ġnot : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetter ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }