[英]How do I sort a Set to a List in Java?
在 Java 中,我有一个Set
,我想把它变成一个有序的List
。 java.util.Collections
包中是否有一种方法可以为我执行此操作?
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);
排序集:
return new TreeSet(setIWantSorted);
要么:
return new ArrayList(new TreeSet(setIWantSorted));
以下是使用 Java 8 的 Streams 实现的方法:
mySet.stream().sorted().collect(Collectors.toList());
或使用自定义比较器:
mySet.stream().sorted(myComparator).collect(Collectors.toList());
List myList = new ArrayList(collection);
Collections.sort(myList);
......但是应该可以解决问题。 在适用的情况下使用泛型添加风味。
始终安全地使用 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 薪水等)。 可以通过使用 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 = unsorted set 和 list = 要返回的列表
您可以将集合转换为ArrayList
,您可以在其中使用Collections.sort(List)
对ArrayList
进行排序。
这是代码:
keySet = (Set) map.keySet();
ArrayList list = new ArrayList(keySet);
Collections.sort(list);
@Jeremy Stein 我想实现相同的代码。 同样,我想将集合排序到列表中,因此我没有使用 Set 我将集合值转换为 List 并通过它的一个变量对该列表进行排序。 这段代码帮助了我,
set.stream().sorted(Comparator.comparing(ModelClassName::sortingVariableName)).collect(Collectors.toList());
我正在使用此代码,我发现它比上面接受的答案更实用:
List<Thing> thingList = new ArrayList<>(thingSet);
thingList.sort((thing1, thing2) -> thing1.getName().compareToIgnoreCase(thing2.getName()));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.