[英]java 8 stream.sorted with comparator in sets
我有一个排序(使用Comparators),我不知道选择哪个版本:
版本1:
public static void sort(Set<User> users) {
users = users.stream()
.sorted(sort_gender.thenComparing(sort_age))
.collect(Collectors.toCollection(LinkedHashSet::new));
}
版本2:
public static Set<User> sort(Set<User> users) {
return users.stream()
.sorted(sort_gender.thenComparing(sort_age))
.collect(Collectors.toCollection(LinkedHashSet::new));
}
版本3:
public static void sort(Set<User> users) {
users.stream()
.sorted(sort_gender.thenComparing(sort_age))
.collect(Collectors.toSet());
}
版本4
public static List<User> sort(Set<User> users){
List<User> list = new ArrayList<>(users);
list.sort(sort_gender.thenComparing(sort_age));
return list;
}
所有版本对一个集进行排序并返回已排序的集。 我知道,只有linkedHashSet可以保留排序。
我应该选择哪一个 ,我只想对输入属性用户进行排序并将其返回,那么版本1最适合这种情况吗? (对于所有情况,我希望输入用户的引用与输出用户的引用相同。)
编辑:我想,我会选择第4版。
我会添加第4个方法(如果您可以更改该方法以返回已排序的Set
)
users.stream()
.collect(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing...)))
我会返回一个SortedSet
,使调用者明确它实际排序。
如果没有,你可以这样做:
SortedSet<User> sorted = new TreeSet<>(Comparator.comparing...)
sorted.addAll(users);
第一版确实没有任何效果。 您正在更改参数users
的引用,但不会更改作为参数传递但不返回任何内容的集合。
版本2正常工作。
版本3试图将排序集存储在不维护顺序的集合中。 它实际上与返回你给出的集合没有什么不同。 从JavaDoc for toSet
:
返回的Set的类型,可变性,可序列化或线程安全性无法保证
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.