Answers:
OP提供的答案并非最佳。它效率低下,因为它会创建一个新的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
s,而不仅仅是Set
s。并非所有正在阅读此答案的人都将使用a Set
,即使这是原始问题所要求的。
List myList = new ArrayList(collection);
Collections.sort(myList);
……但是应该做到这一点。在适当的地方添加带有泛型的风味。
Comparable
和重写compareTo
方法。
使用Comparator或Comparable接口提供排序实现始终是安全的(如果对象不是原始数据类型的String或Wrapper类)。以比较器实现为例,该实现基于名称对员工进行排序
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 ());
当您需要对同一对象使用不同的排序算法时(例如,emp名称,emp薪水等),Comparator很有用。可以通过使用Comparable接口对所需对象进行单模式排序。
没有单一的方法可以做到这一点。用这个:
@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);
其中originalset =未排序的集合,list =要返回的列表
@Jeremy Stein我想实现相同的代码。同样,我想对要列出的集合进行排序,因此,与其使用“集”,我不将集合值转换为“列表”,并通过该列表对变量进行排序。这段代码对我有帮助,
set.stream().sorted(Comparator.comparing(ModelClassName::sortingVariableName)).collect(Collectors.toList());