Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java+;比较器+;分类_Java_Collections_Comparator - Fatal编程技术网

Java+;比较器+;分类

Java+;比较器+;分类,java,collections,comparator,Java,Collections,Comparator,我正在从格式列表中的DB获取数据 UserSession将具有WorkStationName、UserName和AreaName 现在我想先按WorkStationname排序,然后按用户名排序,然后按AreaName排序 如何在java中实现它?是否可以使用Comparator执行此操作?您可以使用查询执行此操作 或者您可以覆盖一个比较函数。 on stackoverflow将帮助您做到这一点最佳方式: public void sortAccordingToAboveRequirement(L

我正在从格式列表中的DB获取数据

UserSession将具有WorkStationName、UserName和AreaName

现在我想先按WorkStationname排序,然后按用户名排序,然后按AreaName排序


如何在java中实现它?是否可以使用Comparator执行此操作?

您可以使用查询执行此操作
或者您可以覆盖一个
比较
函数。
on stackoverflow将帮助您做到这一点

最佳方式:

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;
    }
};
public void sort根据任何要求(列出用户会话){
Collections.sort(userSessions,myComparator);
}
静态比较器myComparator=新比较器(){
@凌驾
公共int比较(UserSession user1、UserSession user2){
int值=0;
value=user1.getWorkStationName().compareTo(user2.getWorkStationName())
如果(值!=0)返回值;
value=user1.getUserName().compareTo(user2.getUserName());
如果(值!=0)返回值;
value=user1.getAreaName().compareTo(user2.getAreaName());
返回值;
}
};

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

您可以使用comparator,也可以为类实现可比较接口。我给你举一个例子来说明第二种方法:

Collections.sort(UserSessionList);
类UserSession现在必须
实现类似的
。然后可以重写这个类的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());
}

您现在必须自己编写比较函数的其余部分!:)

我打赌你还没试过。:)到目前为止你做了什么?在此发布您的进度我创建了第一个区域比较,然后此列表将再次对用户比较进行排序,然后此列表将再次按工作站的比较器进行排序。但它没有给出正确的结果。您不能在数据库中使用ORDER by子句,假设它是SQL吗?是的,我可以使用它,但它是一个条件查询,数据不正确可能是大写或小写,它将同时出现在两个术语中。因此它不会产生正确的排序结果。它应该是一个注释,而不是答案……耶,我尝试过了。但它说,我需要一些声誉或分数(不管是什么)才能在评论中表达出来。无论如何,解决方案总是解决方案。(我的意思是我试图给予)。看看投票结果。这与我给出的答案几乎相同:)