【问题标题】:Ordering post in list by atribute java按属性java在列表中排序帖子
【发布时间】:2013-01-13 23:53:44
【问题描述】:

是否可以间接排序 List 中的元素(在 Java 7 中)?假设列表元素是具有属性(Post 类型的属性)id、文本、时间戳(从 1970 年开始的毫秒 - 只是数字类型 long)的 post 元素。 这些帖子存储在数据库(MySQL)中,它们是不同 SELECT 的结果。这是因为帖子是 twitter 上的推文——添加用户的帖子、用户关注的用户帖子以及其他一些帖子。这个想法是做一些 SELECTS,每个都以列表的形式获取结果,这些列表将被添加到一个列表中,我想按属性(时间戳)对其进行排序。有什么简单的方法可以通过这个属性(时间戳)间接排序(从高到低 - 拥有最新到最旧的帖子)?我知道 List 有属性排序,我可能应该用它做点什么。

【问题讨论】:

  • 为你的Post 类写一个Comparator 并使用Collections.sort(list, comparator)
  • @SJuan76 仅供参考,使用 %20 作为空格并在链接 cmets 中使用 \ 转义括号。
  • 但是我不知道怎么写那个该死的比较器。
  • @user1097772 仔细阅读 javadoc 和谷歌示例,有很多

标签: java list sorting collections


【解决方案1】:

您可能想要使用Set,更具体地说是SortedSet(它的基本实现是TreeSet),而不是List。但是,这将要求您的 post 类实现 Comparable 本身。

当然,在数据库级别始终可以选择ORDER BY。这样你就可以使用经典的List

【讨论】:

  • 我不确定 - 当我使用 Set 时,排序属性不是唯一的不是问题吗?理论上可能会有更多具有相同时间戳的帖子。
  • 您不仅限于比较时间戳。你说其中有一个 id,这非常独特:如果时间戳相等,则比较 id。
【解决方案2】:

您可以使用Order By子句查询数据库以按时间戳顺序获取结果,然后您不必在java端进行排序。

【讨论】:

  • 不可能或太复杂的查询,因为正如我在问题中所写的那样,我从数据库上的多个 SELECT 中获取列表,我将做一个 SELECT,第二个,第三个,...(原因我对它们有不同的要求),然后我会排序。
【解决方案3】:

有两种方法可以做到这一点。您可以通过使用ORDER BY column 或使用可比较和比较器对对象进行排序来从查询中执行此操作。链接 =

http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/

【讨论】:

    猜你喜欢
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    相关资源
    最近更新 更多