【发布时间】:2018-08-10 16:26:59
【问题描述】:
我有一个 Answer 类和一个 User 类。
答案有一个getUser(),用户有一个getPoints()
从答案列表中,我想获得按点排序的用户 HashSet。我尝试了以下操作:
Set<User> collectSet = list.stream().map(Answer::getUser)
.sorted(Comparator.comparing(User::getPoints))
.collect(Collectors.toCollection(HashSet::new));
collectSet.forEach(a -> System.out.println(a.toString()));
不幸的是,这似乎并没有保留顺序。输出总是不同的。
有趣的是,与 list 相同的示例确实可以正常工作
List<User> collectList = list.stream().map(Answer::getUser)
.sorted(Comparator.comparing(User::getPoints))
.collect(Collectors.toList());
collectList.forEach(a -> System.out.println(a.toString()));
我做错了什么?
【问题讨论】:
-
一个 HashSet 没有任何顺序。如果要保留插入顺序,请使用 List 或 LinkedHashSet
-
我不想要任何重复的元素。这就是为什么我需要一套。
-
然后使用
.distinct() -
你认为 LinkedHashSet 是什么?为什么不阅读 javadoc?
-
forEach不是确定性的。至少使用forEachOrdered
标签: java java-stream