जावा में, मेरे पास एक है Set
, और मैं इसे एक हल में बदलना चाहता हूं List
। क्या java.util.Collections
पैकेज में कोई विधि है जो मेरे लिए ऐसा करेगी?
जावा में, मेरे पास एक है Set
, और मैं इसे एक हल में बदलना चाहता हूं List
। क्या java.util.Collections
पैकेज में कोई विधि है जो मेरे लिए ऐसा करेगी?
जवाबों:
ओपी द्वारा प्रदान किया गया उत्तर सबसे अच्छा नहीं है। यह अक्षम है, क्योंकि यह एक नया List
और एक अनावश्यक नया सरणी बनाता है । इसके अलावा, यह जेनेरिक सरणियों के आसपास के प्रकार के सुरक्षा मुद्दों के कारण "अनियंत्रित" चेतावनी उठाता है।
इसके बजाय, कुछ इस तरह का उपयोग करें:
public static
<T extends Comparable<? super T>> List<T> asSortedList(Collection<T> c) {
List<T> list = new ArrayList<T>(c);
java.util.Collections.sort(list);
return list;
}
यहाँ एक उदाहरण है:
Map<Integer, String> map = new HashMap<Integer, String>();
/* Add entries to the map. */
...
/* Now get a sorted list of the *values* in the map. */
Collection<String> unsorted = map.values();
List<String> sorted = Util.asSortedList(unsorted);
Util
वर्ग है जिसमें asSortedList()
मेरे द्वारा लिखी गई विधि है। दूसरे शब्दों में, आप Util
स्वयं कक्षा लिखते हैं , और उस कोड को उसमें डालते हैं।
क्रमबद्ध सेट:
return new TreeSet(setIWantSorted);
या:
return new ArrayList(new TreeSet(setIWantSorted));
Set
?
new TreeSet
स्वीकार करता है Collection
, न कि सिर्फ Set
एस। हर कोई जो इस उत्तर को नहीं पढ़ रहा है, वह एक का उपयोग करने जा रहा है Set
, भले ही वह मूल प्रश्न पूछ रहा हो।
List myList = new ArrayList(collection);
Collections.sort(myList);
... हालांकि चाल करना चाहिए। जहां लागू हो वहां जेनरिक के साथ स्वाद जोड़ें।
Comparable
और ओवरराइड कर सकते हैं compareTo
।
छँटाई कार्यान्वयन प्रदान करने के लिए हमेशा या तो तुलनात्मक या तुलनीय इंटरफ़ेस का उपयोग करना सुरक्षित होता है (यदि वस्तु आदिम डेटा प्रकारों के लिए स्ट्रिंग या आवरण कक्षाएं नहीं है)। नाम के आधार पर कर्मचारियों को छाँटने के लिए एक तुलनित्र कार्यान्वयन के लिए एक उदाहरण के रूप में
List<Employees> empList = new LinkedList<Employees>(EmpSet);
class EmployeeComparator implements Comparator<Employee> {
public int compare(Employee e1, Employee e2) {
return e1.getName().compareTo(e2.getName());
}
}
Collections.sort(empList , new EmployeeComparator ());
तुलनित्र तब उपयोगी होता है जब आपको एक ही वस्तु पर अलग-अलग सॉर्टिंग एल्गोरिदम रखने की आवश्यकता होती है (जैसे नाम, साम्राज्य का वेतन, आदि)। आवश्यक मोड के लिए तुलनीय इंटरफ़ेस का उपयोग करके एकल मोड छँटाई को लागू किया जा सकता है।
ऐसा करने के लिए कोई एकल विधि नहीं है। इसे इस्तेमाल करो:
@SuppressWarnings("unchecked")
public static <T extends Comparable> List<T> asSortedList(Collection<T> collection) {
T[] array = collection.toArray(
(T[])new Comparable[collection.size()]);
Arrays.sort(array);
return Arrays.asList(array);
}
TreeSet sortedset = new TreeSet();
sortedset.addAll(originalset);
list.addAll(sortedset);
जहाँ ओरिजिनलसेट = अनसर्टेड सेट और लिस्ट = वापस की जाने वाली सूची
@ जेरेमी स्टीन मैं एक ही कोड लागू करना चाहता था। साथ ही मैं सेट को सूची में क्रमबद्ध करना चाहता था, इसलिए सेट के उपयोग के बजाय मैंने सेट मानों को सूची में परिवर्तित किया और उस सूची को उस चर के आधार पर क्रमबद्ध किया। इस कोड ने मेरी मदद की,
set.stream().sorted(Comparator.comparing(ModelClassName::sortingVariableName)).collect(Collectors.toList());