所以我正在使用Spring MVC,并且我正在尝试对从父对象获取的list
个对象进行排序。现在我有一个Course
对象,其列表为Posts
。我还有User
订阅了Courses
我正在使用for loop
获取用户订阅的每个posts
的所有Course
我想让它以某种方式返回新闻Feed,现在它会在顶部显示第一个post
,并将新的posts
添加到底部。
在我的应用程序的其他部分,我有一个findByObjectOrderbyIdDesc
,它按照我想要的方式按时间顺序返回对象,但那是我使用存储库的时候,我不是在这里做的。所以我不知道该怎么做。
我会展示一些代码,所以你们可以看到我在说什么
控制器
@RequestMapping(value="{user}", method=RequestMethod.GET)
public String userPageGet (ModelMap model, @AuthenticationPrincipal User user)
{
List<StudySet> studySets = studySetRepo.findByUser(user);
model.addAttribute("studySets", studySets);
List<Course> courses = courseRepo.findByUser(user);
model.addAttribute("courses", courses);
Set<Post> posts = new TreeSet<>();
for (Course course : courses) {
posts.addAll(course.getPosts());
}
model.addAttribute("posts", posts);
return "user";
}
如果有人能够找到我的问题的解决方案,并且可以让我知道这将是伟大的。提前谢谢。
答案 0 :(得分:2)
如果这是问题:
@FarazDurrani帖子的排序方向错误,我希望最新的帖子位于页面顶部,但第一篇文章保留在页面顶部,最新的帖子被添加到页面顶部底部
然后:
您Post
显然正在实施Comparable
界面(如果不是,请不要将其添加到TreeSet
而不显式Comparator
)。
TreeSet
对其项目进行排序,但您希望它按相反顺序排列:
你有很多选择:
compareTo(T o)
类中的Post
方法(将结果与-1
相乘),但我想这不是最佳解决方案,因为它会影响所有其他基础功能关于Post
可比较的实施。使用明确的TreeSet
初始化Comparator
。由于您的Post
类已经实现了您想要反转的Comparable
,因此变得简单:
new TreeSet(new Comarator<Post>{
public in compare(Post o1, Post o2){
//o2.compareTo(o1) instead of o1.compareTo(o2) makes it reverse
return o2.compareTo(o1);
}
})
这就是我选择的方式。
使用List
和Collections.reverse(list)
函数:
Set<Post> posts = new TreeSet<>();
for (Course course : courses) {
posts.addAll(course.getPosts());
}
List<Post> postList = new ArrayList<>(posts);
Collections.reverse(postList);
model.addAttribute("posts", postList);