मेरे पास एक कक्षा है जिसे मैं scala.collection.mutable.PriorityQueue में उपयोग करना चाहता हूं, लेकिन मैं इसे केवल एक उद्देश्य के लिए आदेश देना चाहता हूं [ए]। मैं उस आदेश पर विचार नहीं करता जिसे मैं प्राथमिकता क्यूयू के संबंध में कक्षा के प्राकृतिक क्रम के रूप में उपयोग करना चाहता हूं।स्कैला: क्या जावा में प्राथमिकता क्यूई का उपयोग करने का कोई तरीका है?
class MyObject (sequence: Int, values: List[String]) ...
तो, मेरी PriorityQueue में, मैं चाहूँगा मूल्यों 'अनुक्रम' द्वारा आदेश दिया जा सकता है। हालांकि, सिर्फ इसलिए कि दो ऑब्जेक्ट्स में एक ही अनुक्रम होता है, जिससे उन्हें स्वाभाविक रूप से बराबर नहीं बनाया जाता है क्योंकि उनके 'मूल्यों' की सामग्री अलग हो सकती है।
यह जहां, जावा में, यह PriorityQueue के लिए एक वैकल्पिक तुलनाकारी वस्तु आपूर्ति करने में सक्षम होने के लिए अच्छा है है। मेरा तुलनाकर्ता वस्तुओं को उनके 'अनुक्रम' के संबंध में आदेश देगा और उनके 'मूल्यों' को अनदेखा करेगा।
PriorityQueue वर्ग एक साथ parameterized किया जाना चाहिए "एक <% आदेश दिया [एक]"
class PriorityQueue[A <% Ordered[A]] extends ...
मैं क्या पढ़ा है से, इसका मतलब यह है मेरी कक्षा आदेश दिया विस्तार करना होगा [एक] या मैं एक प्रदान करनी चाहिए ऑर्डर करने के लिए "अंतर्निहित डीफ" प्रकार रूपांतरण [ए], जो ईमानदारी से, सुरुचिपूर्ण लगता है।
जावा समाधान लगता है और अधिक "कार्यात्मक" मुझे मुझे एक वर्ग पदानुक्रम में मजबूर कर या मेरी कक्षा monkeypatching के बजाय एक तुलनाकारी समारोह जैसी वस्तु पारित करने के लिए अनुमति देता है।
मुझे एहसास है कि PrioirityQueue का उपयोग करने के विकल्प हैं, लेकिन मुझे लगता है कि मैं यहां स्कैला सीखने की वक्र के खिलाफ उछाल रहा हूं और इस डिजाइन निर्णय को पूरी तरह से खोजे बिना छोड़ना नहीं चाहता हूं।
स्काला पुस्तकालय में यह सिर्फ एक दुर्भाग्यपूर्ण निर्णय है या मैं परंपरा है कि PriorityQueue अधिक उपयोगी और 'कार्यात्मक' बनाता है बुला किसी प्रकार का गलत समझ रहा हूँ?
धन्यवाद