繁体   English   中英

如何在 Java 中将 Set 排序为 List?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM