/******************************************************************************* Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ġor Ġmore Ċ Ġ* Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ġdistributed Ġwith Ċ Ġ* Ġthis Ġwork Ġfor Ġadditional Ġinformation Ġregarding Ġcopyright Ġownership . Ċ Ġ* ĠThe ĠASF Ġlicenses Ġthis Ġfile Ġto ĠYou Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ċ Ġ* Ġ( the Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ċ Ġ* Ġthe ĠLicense . Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġai . plat on . pulsar . crawl . index Ċ Ċ import Ġorg . apache . hadoop . io . Text Ċ import Ġorg . apache . hadoop . io . Writable Ċ import Ġjava . io . Data Input Ċ import Ġjava . io . Data Output Ċ import Ġkotlin . jvm . Jvm Over loads Ċ import Ġkotlin . Throws Ċ import Ġjava . lang . Clone NotSupportedException Ċ import Ġjava . io . IOException Ċ import Ġjava . time . Instant Ċ import Ġjava . util .* Ċ import Ġjava . util . stream . Collectors Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġrepresents Ġa Ġmulti - valu ed Ġfield Ġwith Ġa Ġweight . ĠValues Ġare Ċ Ġ* Ġarbitrary Ġobjects . Ċ Ġ*/ Ċ class ĠIndex Field Ġ: ĠWrit able , ĠClone able Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġweight Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġvalues : ĠMutable List < Any > Ġ= ĠArrayList () ĊĊĠĠĠ Ġconstructor () Ġ{} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġconstructor ( value : ĠAny , Ġweight : ĠFloat Ġ= Ġ 1 . 0 f ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . weight Ġ= Ġweight ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġis ĠCollection <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . addAll ( value Ġas ĠCollection < Any >) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . add ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( value : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalues . add ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Weight (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġweight ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Weight ( weight : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . weight Ġ= Ġweight ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Values (): ĠList < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalues ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġstring Values : ĠList < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġvalues . stream (). map Ġ{ Ġobj : ĠAny Ġ-> Ġobj . toString () Ġ}. collect ( Collectors . toList ()) ĊĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġweight Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠ Ġvalues . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Clone NotSupportedException :: class ) ĊĠĠĠ Ġpublic Ġoverride Ġfun Ġclone (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsuper . clone () Ġas ĠIndex Field ĊĠĠĠĠĠĠĠ Ġresult . weight Ġ= Ġweight ĊĠĠĠĠĠĠĠ Ġresult . values Ġ= Ġvalues ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġread Fields (` in `: ĠData Input ) Ġ{ ĊĠĠĠĠĠĠĠ Ġweight Ġ= Ġ` in `. read Float () ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġ` in `. readInt () ĊĠĠĠĠĠĠĠ Ġvalues Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠText . readString (` in `) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== Ġ" java . lang . String ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . add ( Text . readString (` in ` )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== Ġ" java . lang . Boolean ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . add (` in `. read Boolean ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== Ġ" java . lang . Integer ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . add (` in `. readInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== Ġ" java . lang . Float ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . add (` in `. read Float ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== Ġ" java . lang . Long ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . add (` in `. read Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== Ġ" java . util . Date ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . add ( Date (` in `. read Long ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== Ġ" java . time . Instant ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . add ( Instant . of Epoch Milli (` in `. read Long ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġwrite ( out : ĠData Output ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout . write Float ( weight ) ĊĠĠĠĠĠĠĠ Ġout . writeInt ( values . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( value Ġin Ġvalues ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText . writeString ( out , Ġvalue . java Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġis ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Boolean ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Long ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Float ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText . writeString ( out , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠDate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Long ( value . time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠInstant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Long ( value . to Epoch Milli ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalues . toString () ĊĠĠĠ Ġ} Ċ }