मान लीजिए कि आपकी कक्षा इस तरह कुछ दिखती है, और आप इसे संशोधित नहीं कर सकते हैं।
final class MyClass
{
private final int[] key;
MyClass(int[] key)
{
this.key = key.clone();
}
public int[] getKey()
{
return key.clone();
}
}
उसके बाद, आप Comparator
इंटरफेस को लागू करने से MyClass
की घटनाओं के लिए एक आदेश परिभाषित कर सकते हैं। अधिक सामान्य होने के लिए, मैं वास्तव में int[]
के लिए एक तुलनित्र को लागू करने के लिए जा रहा हूँ:
final class IntArrayComparator
implements Comparator<int[]>
{
@Override
public int compare(int[] a, int[] b)
{
int n = Math.min(a.length, b.length);
for (int idx = 0; idx < n; ++idx) {
if (a[idx] != b[idx])
return (a[idx] < b[idx]) ? -1 : +1;
}
return a.length - b.length;
}
}
इस नए तुलनित्र को देखते हुए, और अपने मौजूदा प्रकार, यह सॉर्ट करने के लिए आसान है:
final class Test
{
public static void main(String... arg)
{
/* Create your list somehow... */
List<MyClass> list = new ArrayList<>();
list.add(new MyClass(new int[]{0, 1, 4, 5}));
list.add(new MyClass(new int[]{0, 0, 2, 3}));
list.add(new MyClass(new int[]{0, 1, 1, 2}));
/* Now sort the list. */
list.sort(Comparator.comparing(MyClass::getKey, new IntArrayComparator()));
/* Display the result... */
list.stream().map(MyClass::getKey).map(Arrays::toString).forEach(System.out::println);
}
}
आप मिलना चाहिए उत्पादन: में प्रत्येक वस्तु से एक महत्वपूर्ण "निकालने" करने के लिए एक Function
:
[0, 0, 2, 3]
[0, 1, 1, 2]
[0, 1, 4, 5]
comparing()
कारखाने विधि मैं उपयोग कर रहा हूँ दो तर्क लेता है सूची, और Comparator
जो निकाली गई चाबियों की तुलना कर सकते हैं। यदि निकाली गई कुंजी में प्राकृतिक ऑर्डरिंग है, और Comparable
लागू करता है (उदाहरण के लिए, यह String
है), तो Comparator
निर्दिष्ट करना आवश्यक नहीं है।
वैकल्पिक रूप से, आप MyClass
संशोधित कर सकते हैं, तो आप यह Comparable
को लागू करने और उसके compareTo()
विधि के लिए int[]
तुलना चलती, के रूप में अन्य उत्तर में दिखाया गया है द्वारा एक प्राकृतिक आदेश दे सकता है। फिर आप बिना तर्क के sort()
विधि का उपयोग कर सकते हैं।
public class Foo {
private int[] values;
public Foo(int[] values) {
this.values = values;
}
}
वस्तुओं की एक सूची बनाने के लिए::
स्पष्ट है: मेरे सरणी एक पूर्णांक [] है नहीं एक पूर्णांक [] – Maikefer
यह वाकई दिलचस्प है लेकिन ... आप हमें नहीं दिखा तुम क्या कोशिश की है। कोड बनाने से आपको क्या रोक रहा है? –
यदि सरणी निजी हैं, तो आप अपने ऑब्जेक्ट्स को सॉर्ट करने के लिए उनका उपयोग करने की अपेक्षा कैसे करते हैं? आप निजी संपत्तियों की तुलना नहीं कर सकते हैं। – Rainbolt