سؤال

حالة استخدام الارتباط:

read input 

if (correlation-id is already generated for this input) 
{ 
   lookup the correlation-id from the cache; 
   return correlation-id; 
} 

else 
{ 
   generate the correlation-id; 
   cache it; 
   return correlation-id; 
} 

القيود: - يمكن أن يذهب عدد سجلات الإدخال حتى 500 ألف ، لذا لا يريد استخدام مراجع قوية. -لا تريد إنشاء تجزئة في اتجاه واحد حتى الآن (أعرف أنه إذا استخدمنا تجزئة في اتجاه واحد ، فلا داعي لذاكرة التخزين المؤقت)

هل يمكن لأحد أن يخبرني كيفية استخدام ComputingMap لهذا. أنا أسأل هذا لأن هناك ملاحظة في Javadoc تقول "إنها تستخدم مساواة الهوية للمفاتيح الضعيفة/الناعمة".

هل كانت مفيدة؟

المحلول

مع فئات Google Guava/Collection ومفاتيح أو قيم ناعمة أو ضعيفة ، يجب أن تكون مفاتيحك مراجعًا قوية للخريطة لاستخدام متساوٍ () وليس == للبحث عن القيم المخبأة. إذا كان لديك مفاتيح ضعيفة/ناعمة ، فسيتم البحث مع الهوية ، لذا ستحصل دائمًا على ذاكرة التخزين المؤقت. لذا ، إذا كنت تريد أن يقوم جامع القمامة بتجميع عناصر GC من ذاكرة التخزين المؤقت الخاصة بك ، فستحتاج إلى جعل القيم ناعمة أو ضعيفة.

أتفهم أن Google ستضيف ميزة تكافؤ في المستقبل حتى تتمكن من تحديد ما إذا كنت تريد متساوًا () أو == وليس لديك هذا الخيار عن طريق اختيار المراجع القوية أو الضعيفة أو الناعمة.

نظرًا لأن كائن tuple الخاص بك ينفذ متساويًا () و hashcode () ، فأنت تفعل فقط

new MapMaker()
    .softValues()
    .makeComputingMap(new Function<Tuple,String>() {
                                         public String apply(Tuple t) {
                                             // generate the correlation-id
                                         }
                                    });
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top