জাভাতে, আমার কাছে একটি আছে 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());