如何在Java中将Set设置为列表?

在Java中,我有一个Set ,我想把它变成一个有序Listjava.util.Collections包中有一个方法可以帮我吗?

OP提供的答案并不是最好的。 这是低效的,因为它会创build一个新的List 一个不必要的新数组。 此外,由于generics数组的types安全性问题,它引发了“未经检查”的警告。

相反,使用这样的东西:

 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); 

sorting集:

 return new TreeSet(setIWantSorted); 

要么:

 return new ArrayList(new TreeSet(setIWantSorted)); 
 List myList = new ArrayList(collection); Collections.sort(myList); 

…应该做的伎俩,但是。 在适用的地方添加仿制药。

以下是如何使用Java 8的Streams来完成的:

 mySet.stream().sorted().collect(Collectors.toList()); 

或与自定义比较器:

 mySet.stream().sorted(myComparator).collect(Collectors.toList()); 

总是安全地使用Comparator或Comparable接口来提供sorting实现(如果对象不是基本数据types的String或Wrapper类)。 作为一个比较器实现的例子,根据名称对员工进行sorting

  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 ()); 

当您需要在同一对象上使用不同的sortingalgorithm(比如说emp名称,emp工资等)时,Comparator非常有用。 单模式sorting可以通过在需要的对象中使用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); } 

你可以将一个集合转换成一个ArrayList ,你可以使用Collections.sort(List)ArrayList进行sorting。

这里是代码:

 keySet = (Set) map.keySet(); ArrayList list = new ArrayList(keySet); Collections.sort(list); 
 TreeSet sortedset = new TreeSet(); sortedset.addAll(originalset); list.addAll(sortedset); 

where originalset = unsorted set和list =要返回的列表