【问题标题】:Java + comparator + sorting [closed]Java +比较器+排序[关闭]
【发布时间】:2013-10-31 12:59:59
【问题描述】:

我正在从 DB 中获取 List 格式的数据。

UserSession 将具有 WorkStationName、UserName 和 AreaName。

现在我想先对 WorkStationname 进行排序,然后是 userName,然后是 AreaName。

如何在java中做到这一点?是否可以使用 Comparator 来做到这一点?

【问题讨论】:

  • 我敢打赌你还没试过。 :)
  • 到目前为止你做了什么?在此处发布您的进度
  • 我已经创建了第一个区域压缩,然后这个列表将再次对用户组合进行排序,然后这个列表将再次按 Workstation 的比较器排序。但它没有给我正确的结果..
  • 你不能在数据库中使用 ORDER BY 子句,假设它是 SQL 吗?
  • 是的,我可以使用它,但是它的条件查询和数据不正确可能是大写或小写,它会出现在两个术语中。所以它不会产生正确的排序结果.

标签: java collections comparator


【解决方案1】:

最好的方法:

public void sortAccordingToAboveRequirement(List<UserSession> userSessions){

 Collections.sort(userSessions,myComparator);

 }


  static Comparator<UserSession> myComparator=new Comparator<UserSession>() {
    @Override
        public int compare(UserSession user1, UserSession user2) {
        int value=0;
        value=user1.getWorkStationName().compareTo(user2.getWorkStationName())
        if(value!=0) return value;
        value=user1.getUserName().compareTo(user2.getUserName());
        if(value!=0) return value;
        value=user1.getAreaName().compareTo(user2.getAreaName());
        return value;
    }
};

如果你愿意,可以使用 compareToIgnoreCase() :)

【讨论】:

    【解决方案2】:

    您可以使用查询来执行此操作。
    或者您可以覆盖 compare 函数。
    stackoverflow 上的This Post 将帮助您做到这一点

    【讨论】:

    • 它应该是一个评论,而不是答案......
    • 是的,我试过了。但它说我需要一些声誉或积分(无论是什么)才能将其放在评论中。无论如何,解决方案始终是解决方案。 (我的意思是我试图给予)。并查看赞成的答案。这与我给出的帖子链接几乎相同
    • 试试我给出的答案:)
    【解决方案3】:

    您可以使用比较器,也可以为您的类实现可比较接口。第二种方式我举个例子:

    Collections.sort(UserSessionList);
    

    UserSession 类现在必须implements Comparable&lt;UserSession&gt;。然后你可以重写这个类的 compareTo 方法。例如:

    @Override
    public int compareTo(UserSession o) {
    
        if(null== o)
            return 1;
        if(getWorkStationName() == null && o.getWorkStationName()==null)
            return 0;
        if(getWorkStationName() == null && o.getWorkStationName()!=null)
            return -1;
        if(getWorkStationName() != null && o.getWorkStationName()==null)
            return 1;
        return o.getWorkStationName().compareTo(getWorkStationName());
    }
    

    剩下的比较函数你自己写吧! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 2019-01-30
      相关资源
      最近更新 更多