我有一个Answer类和一个User类.
答案有一个getUser()和用户有一个getPoints()
从答案列表中我想得到一个按点排序的用户哈希集.我试过以下:
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()));
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎没有保留顺序.输出总是不同的.
有趣的是,列表的相同示例可以正常工作
List<User> collectList = list.stream().map(Answer::getUser)
.sorted(Comparator.comparing(User::getPoints))
.collect(Collectors.toList());
collectList.forEach(a -> System.out.println(a.toString()));
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Collectors.toCollection(LinkedHashSet::new)
Run Code Online (Sandbox Code Playgroud)
首先,你根据一些条目对这些条目进行排序Comparator- 给它们"一些"顺序,但是然后你把它们放入一个HashSet(顺序被破坏),从而产生不同的结果.使用LinkedHashSet收集它们,以保持排序顺序.
如果您仍想将它们收集到a List,您可以:
yourList.stream()
.sorted(....)
.distinct()
.collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
操作顺序(distinctvs sorted)很重要
| 归档时间: |
|
| 查看次数: |
1272 次 |
| 最近记录: |