如何在Java中将Set设置为列表?
在Java中,我有一个Set
,我想把它变成一个有序List
。 java.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 =要返回的列表