2013-06-18 3 views
5

मैं कई क्षेत्रों के साथ एक ComplexObject है और मैं यह कहना चाहता हूँ:क्या मैं विशेष रूप से शून्य क्षेत्रों को संभालने के लिए गुवा की तुलना चेन का उपयोग कर सकता हूं?

  • यदि क्षेत्र x दोनों पर मौजूद है, तुलना श्रृंखला में अगले compare पर आगे बढ़ें।
  • यदि दोनों शून्य हैं, तो तुलना श्रृंखला में अगले compare पर जाएं।
  • अगर एक शून्य है और अन्य नहीं, पिछले nulls डाल दिया है

मैं, ऐसा करने के तरीके यकीन नहीं है क्योंकि जहाँ तक मैं

.compare(c1.getX(), c2.getX(), Ordering.arbitrary().nullsLast()) 

होगा

बता सकते हैं
  1. ऑब्जेक्ट्स बराबर होने पर विचार करें यदि वे दोनों मौजूद हैं और
  2. ऑब्जेक्ट्स को समान मानते हैं तो वे बराबर हैं।

क्या कोई तरीका है कि मैं क्या चाहता हूं प्राप्त करने के लिए गुवा के ComparisonChain या Ordering कक्षा का उपयोग कर सकता हूं? या इस समस्या को हल करने के बारे में सोचने का एक बेहतर तरीका है?

+0

क्या आपका मतलब है कि आप केवल प्रत्येक क्षेत्र के नल-नेस की परवाह करते हैं या नहीं? –

+0

@EricJablow हाँ। लेकिन अधिक विशिष्ट होने के लिए, मुझे पहले इसकी परवाह है, तो मुझे अन्य चीजों की परवाह होगी। ईजी: अगले '.compare' के लिए मैं 'x' के' name' फ़ील्ड के आधार पर तुलना कर सकता हूं। –

उत्तर

8

मेरी टिप्पणी के जवाब को देखते हुए, बस एक बूलियन तुलना करें।

.compare(c1.getX() == null, c2.getX() == null) 

और अपने संशोधित जबाब दिया, अपने वर्ग के लिए एक विधि

public XType getX() {...} 

है तो फिर XType लागू Comparable<XType> बनाने या एक Comparator<XType> प्रदान करने पर विचार करें।

+4

बूलियन के लिए सरल तुलना विधि अब स्पष्ट रूप से नामित विधियों के पक्ष में बहिष्कृत है क्योंकि यह संदिग्ध है और भ्रम पैदा कर सकती है। यदि आप प्रश्न में बताए गए शून्यों को आखिरी बार चाहते हैं, तो आप तुलना का उपयोग करना चाहते हैं FalseFirst (c1.getX() == null, c2.getX() == null) या तुलना करें ट्राउफर्स्ट (c1.getX()! = Null, c2 .getX()! = शून्य) –

+0

क्या एक सुंदर समाधान है! धन्यवाद –

संबंधित मुद्दे

 संबंधित मुद्दे