如何使用for循环Spring Mvc从父对象中排序对象列表

时间:2016-02-20 04:33:45

标签: java spring spring-mvc

所以我正在使用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";
}

如果有人能够找到我的问题的解决方案,并且可以让我知道这将是伟大的。提前谢谢。

1 个答案:

答案 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);
       }
    })
    

    这就是我选择的方式。

  • 使用ListCollections.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);