java 8 stream.sorted 组中有比较器
java 8 stream.sorted with comparator in sets
我有一组要排序(带比较器),但我不知道该选择哪个版本:
版本 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;
}
所有版本都对集合进行排序,return对排序后的集合进行排序。我知道,只有 linkedHashSet 可以保留顺序。
我应该选择哪个,我只想对输入属性 users 和 return 进行排序,那么版本 1 是否最适合这种情况? (对于所有情况,我希望输入用户的引用与输出用户的引用相同。)
编辑:我想,我会选择版本 4。
我会添加第 4 个方法(如果您可以将该方法更改为 return 已排序 Set
)
users.stream()
.collect(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing...)))
我会 return a SortedSet
让调用者明确知道这实际上是排序的。
如果没有,你可以这样做:
SortedSet<User> sorted = new TreeSet<>(Comparator.comparing...)
sorted.addAll(users);
版本一实际上什么也没做。您正在更改参数 users
的引用,但未更改作为参数传递且不返回任何内容的集合。
版本二工作正常。
版本三试图将一个排序集存储在一个不保持顺序的集合中。这实际上与归还给您的套装没有什么不同。来自 toSet
:
的 JavaDoc
There are no guarantees on the type, mutability, serializability, or
thread-safety of the Set returned
我有一组要排序(带比较器),但我不知道该选择哪个版本:
版本 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;
}
所有版本都对集合进行排序,return对排序后的集合进行排序。我知道,只有 linkedHashSet 可以保留顺序。
我应该选择哪个,我只想对输入属性 users 和 return 进行排序,那么版本 1 是否最适合这种情况? (对于所有情况,我希望输入用户的引用与输出用户的引用相同。)
编辑:我想,我会选择版本 4。
我会添加第 4 个方法(如果您可以将该方法更改为 return 已排序 Set
)
users.stream()
.collect(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing...)))
我会 return a SortedSet
让调用者明确知道这实际上是排序的。
如果没有,你可以这样做:
SortedSet<User> sorted = new TreeSet<>(Comparator.comparing...)
sorted.addAll(users);
版本一实际上什么也没做。您正在更改参数 users
的引用,但未更改作为参数传递且不返回任何内容的集合。
版本二工作正常。
版本三试图将一个排序集存储在一个不保持顺序的集合中。这实际上与归还给您的套装没有什么不同。来自 toSet
:
There are no guarantees on the type, mutability, serializability, or thread-safety of the Set returned