package Ġm ary k . lib Ċ Ċ /** Ċ Ġ* ĠWalk s Ġtwo Ġiterators Ġ([ iterator 1 ] Ġand Ġ[ iterator 2 ]) Ġof Ġsorted Ġvalues Ġso Ġthe Ġvalues Ġcan Ġbe Ġprocessed Ċ Ġ* Ġdepending Ġif Ġthey Ġare Ġpresent Ġon Ġboth Ġiterable Ġcollections Ġwith Ġ[ process Both ], Ġonly Ġon Ġthe Ġfirst Ċ Ġ* Ġwith Ġ[ process Only On Iterator 1 ] Ġor Ġonly Ġon Ġthe Ġsecond Ġwith Ġ[ process Only On Iterator 2 ] Ċ Ġ*/ Ċ fun Ġ< T > Ġsynchronized Iteration ( ĊĠĠĠ Ġiterator 1 : ĠIterator < T >, ĊĠĠĠ Ġiterator 2 : ĠIterator < T >, ĊĠĠĠ Ġcomparator : ĠComparator < T >, ĊĠĠĠ Ġprocess Both : Ġ( T , ĠT ) Ġ-> ĠUnit Ġ= Ġ{ Ġ_, Ġ_ Ġ-> ĠUnit }, ĊĠĠĠ Ġprocess Only On Iterator 1 : Ġ( T ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġprocess Only On Iterator 2 : Ġ( T ) Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġvalue 1 : ĠT ? Ġ= Ġiterator 1 . next () ĊĠĠĠ Ġvar Ġvalue 2 : ĠT ? Ġ= Ġiterator 2 . next () ĊĊĠĠĠ Ġfun Ġprocess 1 ( value : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess Only On Iterator 1 ( value ) ĊĠĠĠĠĠĠĠ Ġvalue 1 Ġ= Ġif Ġ( iterator 1 . hasNext ()) Ġiterator 1 . next () Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprocess 2 ( value : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess Only On Iterator 2 ( value ) ĊĠĠĠĠĠĠĠ Ġvalue 2 Ġ= Ġif Ġ( iterator 2 . hasNext ()) Ġiterator 2 . next () Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠWalk Ġall Ġstored Ġand Ġnew Ġproperties Ġof Ġboth Ġdata Ġmodels Ġand Ġprocess Ġthem ĊĠĠĠ Ġ// Ġdepending Ġon Ġif Ġthey Ġare Ġpresent Ġonly Ġin Ġstored , Ġnew Ġor Ġboth . ĊĠĠĠ Ġwhile Ġ( value 1 Ġ!= Ġnull Ġ|| Ġvalue 2 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġval 1 Ġ= Ġvalue 1 ĊĠĠĠĠĠĠĠ Ġval Ġval 2 Ġ= Ġvalue 2 ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval 1 Ġ== Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess 2 ( val 2 !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval 2 Ġ== Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess 1 ( val 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcomparator . compare ( val 1 , Ġval 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ== Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Both ( val 2 , Ġval 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue 2 Ġ= Ġif Ġ( iterator 2 . hasNext ()) Ġiterator 2 . next () Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue 1 Ġ= Ġif Ġ( iterator 1 . hasNext ()) Ġiterator 1 . next () Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ> Ġ 0 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( iterator 1 . hasNext ()) Ġprocess 1 ( val 1 ) Ġelse Ġprocess 2 ( val 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ< Ġ 0 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( iterator 2 . hasNext ()) Ġprocess 2 ( val 2 ) Ġelse Ġprocess 1 ( val 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ