nim*_*o23 9 java comparator java-8
我有一个排序(使用Comparators),我不知道选择哪个版本:
版本1:
public static void sort(Set<User> users) {
users = users.stream()
.sorted(sort_gender.thenComparing(sort_age))
.collect(Collectors.toCollection(LinkedHashSet::new));
}
Run Code Online (Sandbox Code Playgroud)
版本2:
public static Set<User> sort(Set<User> users) {
return users.stream()
.sorted(sort_gender.thenComparing(sort_age))
.collect(Collectors.toCollection(LinkedHashSet::new));
}
Run Code Online (Sandbox Code Playgroud)
版本3:
public static void sort(Set<User> users) {
users.stream()
.sorted(sort_gender.thenComparing(sort_age))
.collect(Collectors.toSet());
}
Run Code Online (Sandbox Code Playgroud)
版本4
public static List<User> sort(Set<User> users){
List<User> list = new ArrayList<>(users);
list.sort(sort_gender.thenComparing(sort_age));
return list;
}
Run Code Online (Sandbox Code Playgroud)
所有版本对一个集进行排序并返回已排序的集.我知道,只有linkedHashSet可以保留排序.
我应该选择哪一个,我只想对输入属性用户进行排序并将其返回,那么版本1最适合这种情况吗?(对于所有情况,我希望输入用户的引用与输出用户的引用相同.)
编辑:我想,我会选择第4版.
Eug*_*ene 10
我会添加第4个方法(如果您可以更改该方法以返回已排序的方法Set)
users.stream()
.collect(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing...)))
Run Code Online (Sandbox Code Playgroud)
我会返回一个SortedSet为调用者明确指出这实际上是排序的.
如果没有,你可以这样做:
SortedSet<User> sorted = new TreeSet<>(Comparator.comparing...)
sorted.addAll(users);
Run Code Online (Sandbox Code Playgroud)