@ file : Suppress (" PackageName ", Ġ" unused ") Ċ Ċ package Ġorg . art rev . workshop . fp . part 4 . exercise 2 Ċ Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ Ċ /* ĊĠ Ġ-- ĠM emo ization Ġ-- ĊĊĠ ĠIn Ġthe Ġprevious Ġexercise Ġwe Ġmodified Ġthe Ġ` Acc ident Metadata ` Ġclass Ġto Ġuse Ġthe ĊĠ Ġsupplier Ġ` () Ġ-> ĠA ` Ġand Ġbe Ġfully Ġimmutable . ĠAlthough Ġwe Ġmade Ġthe Ġaccident ĊĠ Ġloading Ġlazy Ġwe Ġmade Ġit Ġworse Ġthen Ġthe Ġoriginal , Ġbecause Ġthe Ġfile Ġis Ġread Ġon ĊĠ Ġeach Ġcall Ġto Ġ` data ` Ġproperty . ĊĊĠ ĠWas Ġit Ġworth Ġto Ġchange Ġthe Ġcode Ġto Ġa Ġsupplier Ġform ? ĊĊĠ ĠIn Ġthe Ġbeginning Ġof Ġthe Ġworkshop Ġwe Ġtried Ġto Ġdefine Ġwhat ĠFP Ġis . ĊĊĠ ĠOne Ġof Ġthe Ġcore Ġcharacteristics Ġwas Ġcomposition . ĠThe Ġpower Ġof ĠFP Ġas Ġa Ġpar adig m ĊĠ Ġlies Ġin Ġthe Ġpossibility Ġof Ġbuilding Ġbigger Ġ" things " Ġfrom Ġsmaller Ġ" things ". ĊĊĠ ĠAlthough Ġit 's Ġpossible Ġto Ġdo Ġit Ġin Ġstandard Ġ" OO " Ġor Ġproced ural Ġlanguages , ĠFP ĊĠ Ġgives Ġus Ġtools Ġto Ġmake Ġit Ġeasier . ĊĊĠ ĠWe Ġmoved Ġto Ġthe Ġsupplier Ġimplementation Ġto Ġhelp Ġus Ġexpress Ġa Ġbigger Ġproblem ĊĠ Ġwith Ġa Ġsmaller Ġ" thing ". ĠAnother Ġadvantage Ġof Ġthis Ġis Ġthe Ġstandard ized Ġ" form ". ĊĠ ĠIt 's Ġeasier Ġto Ġbuild Ġif Ġwe Ġknow Ġthe Ġshape Ġof Ġour Ġbr icks ? ĠLe go Ġbr icks ? Ġ:-) ĊĊĠ ĠBack Ġto Ġthe Ġproblem Ġat Ġhand . ĠWe Ġdo Ġnot Ġwant Ġto Ġcall Ġ` load Acc idents ` Ġmultiple ĊĠ Ġtimes . ĊĊĠ ĠThe ĠFP Ġanswer Ġto Ġthis Ġproblem Ġis Ġmemo ization . ĠThe Ġterm Ġwas Ġcreated Ġin Ġ 1 9 6 8 . ĊĠ ĠDerived Ġfrom Ġa Ġlatin Ġword Ġ" mem or and um ". ĠIt Ġis Ġan Ġ" optimization " Ġtechnique Ġused ĊĠ Ġto Ġspeed Ġup Ġthe Ġexecution Ġby Ġstoring Ġthe Ġresults Ġof Ġtime - consum ing Ġfunctions , ĊĠ Ġa Ġmemoized Ġfunction Ġreturns Ġthe Ġcached Ġresult Ġif Ġthe Ġsame Ġinput Ġoccurs . ĊĊĠ ĠM emo ization Ġis Ġa Ġtrade - off , Ġwe Ġexchange Ġexecution Ġtime Ġfor Ġthe Ġmemory Ġconsumption . ĊĠ ĠAs Ġwith Ġall Ġ" optimization " Ġtechniques Ġit Ġshould Ġbe Ġused Ġwith Ġcareful ĊĠ Ġconsideration . Ċ Ġ*/ Ċ Ċ /* ĊĠ ĠPart Ġ 1 : ĊĊĠ ĠPlease Ġcreate Ġtwo Ġadditional Ġmethods Ġfor Ġthe Ġsupplier Ġ` () Ġ-> ĠA `: ĊĠ Ġ- Ġdefault Ġmethod Ġcalled Ġ` memo ized ` Ġthat Ġreturns Ġa Ġsupplier Ġthat Ġwill Ġstore Ġthe ĊĠĠĠ Ġvalue , Ġonce Ġit Ġis Ġgenerated Ġit Ġwill Ġalways Ġreturn Ġthe Ġ" cached " Ġresult Ġin ĊĠĠĠ Ġsubsequent Ġcalls ĊĊĠ ĠH ints : ĊĠ Ġ- Ġdo Ġnot Ġworry Ġabout Ġthe Ġusing Ġthe Ġsupplier Ġbetween Ġseveral Ġthreads ĊĠ Ġ- Ġwe Ġneed Ġto Ġstore Ġthe Ġvalue Ġsomehow Ġ( maybe Ġmutation ?) ĊĊĠ ĠQuestions : ĊĠ Ġ- Ġwhat Ġkind Ġof Ġfunctions Ġpure Ġor Ġimp ure Ġcan Ġbe Ġmemoized ? ĊĠ Ġ- Ġwhy ? Ċ Ġ*/ Ċ Ċ internal Ġfun Ġ< A > Ġ(() Ġ-> ĠA ). memo ized (): Ġ() Ġ-> ĠA Ġ= ĊĠĠĠĠĠĠĠ ĠTODO (" Exercise Ġ 2 ĠSupplier . memo ized Ġis Ġmissing !") Ċ Ċ /* ĊĠ ĠPart Ġ 2 : ĊĊĠ ĠPlease Ġmodify Ġthe Ġ` Acc ident Metadata ` Ġclass Ġimplementation Ġto Ġuse Ġthe Ġnewly ĊĠ Ġcreated Ġmemo ization Ġcapabilities Ġof Ġthe Ġsupplier . ĊĊĠ ĠH ints : ĊĠ Ġ- Ġare Ġthere Ġa Ġlot Ġof Ġchanges Ġrequired ? Ċ Ġ*/ Ċ internal Ġclass ĠAcc ident Metadata ( val Ġid : ĠLong , Ġval Ġsource : ĠFile ) Ġ{ ĊĠĠĠ Ġval Ġdata : Ġ() Ġ-> ĠString Ġ= Ġ:: load Acc ident ĊĊĠĠĠ Ġprivate Ġfun Ġload Acc ident (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsource . read Lines (). reduce Ġ{ Ġa , Ġb Ġ-> Ġa Ġ+ Ġb Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSource File Cor rupted (" Error Ġwhen Ġreading : Ġ${ source . absolute Path }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSource File Cor rupted Ġinternal Ġconstructor ( message : ĠString ) Ġ: ĠRuntimeException ( message ) Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile (" src / main / resources / part 4 / acc ident . info ") ĊĠĠĠ Ġval Ġmetadata Ġ= ĠAcc ident Metadata ( 4 2 L , Ġfile ) ĊĊĠĠĠ Ġ// ĠLet 's Ġsee Ġthe Ġconsole Ġand Ġcheck Ġif Ġthe Ġaccident Ġdata Ġis Ġcorrectly ĊĠĠĠ Ġ// Ġmemoized ĊĠĠĠ Ġvar Ġdata Ġ= Ġ" error !" ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 9 9 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġ= Ġmetadata . data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" acc ident Ġdata Ġ= Ġ$ data ") Ċ } Ċ